MySQL数据库的四类索引?

说起这些指标,我有很多实践经验。
我们先来说说“指数”。
这是最基本的普通索引。
它可以索引所有内容,并且数据重复没有问题。

然后是“独特”。
这个东西有点特殊,要求列中的值是唯一的,但是它相当宽容,允许空值存在。
如果您创建组合索引,这一点将更加重要。
它必须是所有列值的唯一组合,而不是单个列。

我们来谈谈“主键”。
这个东西就是主键索引。
这实际上是唯一的索引,但它受到特殊处理:一张表只能有一个,并且不能包含空值。
这通常在创建表的同时完成。

综合线索,这个东西还蛮有趣的。
您可以在多个字段上创建索引,但使用它们时必须注意顺序。
只有当您的查询条件包含第一个字段时,该索引才能起作用。

说到“fulltext”,就是全文索引,主要用于搜索文本数据。
但是它有一个限制,只有MyISAM存储引擎支持它。
不支持低于 5 .6 的 InnoDB 引擎版本。

哦,对了,一个表最多支持1 6 个索引,总长度至少2 5 6 字节。
有两种类型的索引:B 树和哈希。
B树是最常用的。

索引可以提高查询速度,但创建和维护索引会消耗资源,尤其影响数据插入的速度。
因此,如果打算批量插入数据,最好先drop索引,等数据插入完成后再重建索引,这样效率会更高。
这是我在实战中学到的经验。

大数据基础:MySQL索引类型简介

那天我在公司加班,调试一个很慢的SQL查询,看到执行计划中有一个索引没有被使用,这让我的心猛地一跳。
我摸着键盘心想,如果我正确使用这个索引的话,可能只需要几秒钟,但现在却要等半天。
MySQL索引确实让人又爱又恨。
有时如果添加太多,查询会变慢;有时如果添加太少,查询将无法工作。
就像做菜一样,调料加多了味道不好,加得太少又乏味。

常规索引是最基本的,就像给书添加目录一样,这样你可以更快地找到东西。
在2 02 2 年3 月的项目中,我在用户表上添加了常规索引,查询时间从2 秒下降到0.3 秒。
老板称赞我工作效率高。
创作方法也十分简单。
您可以在创建表时添加、创建表后添加或在更改表结构时添加。
但请注意,在对字符串字段建立索引时,可以指定其长度,例如 name(1 1 )。
并非所有字段都建立索引,这会浪费资源。

唯一索引要求列值不能重复,但可以有空值。
上次我给订单表添加了唯一索引,避免重复插入同一个订单号,结果忘记添加默认值,差点报错。
创建方法和普通索引类似,就是在前面加上UNIQUE。
如果表已经有数据,添加唯一索引之前必须先去重,否则会失败。

主键索引是最特殊的。
表只能有一个,列值不能为空,必须添加。
我经常在创建表的时候直接指定主键,比如id INT AUTO_INCRMENT PRIMARY KEY,这样比较省事。
修改表结构时添加主键索引有点麻烦,所以需要使用ADD CONSTRAINT。
记得添加主键索引时,表中已经有重复的ID,立刻报错,让我捏了一把汗。

串联索引将多个字段索引在一起,使用时必须遵循最左前缀原则。
例如INDEX(id, name),在进行查询时,必须先使用id,然后才能使用name。
我在用户登录查询中使用连接索引将用户名和密码一起索引。
结果,查询速度提高了一倍。
仔细想想,这是有道理的。
检查用户名时,您必须首先知道用户名。
但如果查询时只使用密码,那么连接索引就没用了。

全文索引最神奇的不是直接比较,而是像搜索引擎一样搜索关键词。
我给articles表添加了全文索引,并使用MATCH...AGAINST进行查询,结果非常棒。
但要注意全文索引只能用于CHAR、VARCHAR和TEXT类型,并且查询时必须使用MATCH...OPPOSITION,并且不能使用纯=。
有一次我忘记使用 MATCH...OPPONENT,我找不到任何东西。
我认为索引没有正确添加。

索引既复杂又简单。
添加太多会减慢运行速度写,因为每次插入、更新和删除都必须维护索引;添加太少会减慢读取操作。
因此,必须根据实际查询场景进行添加。
在一个电商项目中,我给商品表的类别、价格、状态添加了联接索引。
查询速度非常快,但插入速度却相当慢。
现在我在想,我是否可以添加一个索引来查找某个类别下某个价格范围内的产品?等等,还有一件事,索引维护也很重要,比如定期检查索引碎片并使用 OPTIMIZE TABLE 进行优化。

我突然想到,数据库中的索引是不是有点像生活中的选择?添加该索引后,可能无法添加其他索引;索引使用不好,查询会很慢;如果索引用得好,查询就会很快。
就像人生的选择一样,你选择了一个,就不能选择另一个;选择得好,人生就会一帆风顺;如果选择不好,生活就会很困难。

最后想问一下,大家有遇到过索引用得好的情况吗?还是索引使用不当的情况?