MySQL 索引可以大幅度增加查询性能
因为会有 1.额外空间保存索引 2.插入、更新、删除操作,会有额外的开销 等代价。所以索引适用于读多写少的场景
索引类型
-
唯一索引
索引列中的值必须是唯一的,但允许出现空值。用来保证数据的唯一性,比如保存账户信息的表,账户的 id 是唯一的,重复插入相同的 id,mysql 会返回异常。 -
主键索引
特殊的唯一索引。但不允许出现空值 -
普通索引
与唯一索引不同,允许索引列中出现相同的值。比如学生的成绩表,学生的分数是允许重复的,就可以使用普通索引 -
联合索引
多个列共同组成的索引。一个表中含有多个单列的索引并不是联合索引。联合索引是对多个字段按顺序共同组成一个索引。
使用时应该注意最左原则,就是 where 查询条件中的字段必须与索引字段从左到右进行匹配。 -
全文索引
MyISAM 实现了这个索引,MySQL5.6 以后后,InnoDB 也支持了这个索引,并且在 5.7.6 后支持了中文全文索引,只能在 char/varchar/text 类型上使用。底层使用的是倒排索引实现
索引实现
-
B+ 树(B-Tree)
适合大于或小于这种范围查询,是 MySQL 是常使用的索引实现 -
R-Tree
是一种用于处理多维数据的数据结构,可以对地理数据进行空间索引。实际业务场景应用的比较少。 -
Hash
使用散列表来对数据进行索引。Hash 方式不需要像 B-Tree 那样,需要查询多次才能定位到记录,因此 Hash 索引的效率比 B-Tree 高,但是不支持范围查找、排序等功能,实际使用的也比较少 -
FullText
前面说的全文索引,是一种记录关键字与文档关系的一种倒排索引
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于