MySQL 索引
2020-03-11 本文已影响0人
仰望_
MySQL索引的好处不言而喻,如果对MySQL正确合理设计并且使用索引就好像是一辆法拉利,然而没有设计和使用索引的MySQL就像一辆自行车
MySQL类型
1、普通索引
Normal是最基本的索引,它没有任何限制,也是我们大多数情况下用到的索引
2、唯一索引
Unique与普通索引类似,但索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。
3、全文索引
Full Text 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
MySQL索引方式
1、BTREE
BTREE是最常见的索引类型,所有值(被索引的列)都是排过序的,每个叶节点到跟节点距离相等。所以BTREE适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)
2、HASH
1.仅支持"=","IN"和"<=>"精确查询,不能使用范围查询:
由于Hash索引比较的是进行Hash运算之后的Hash值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的Hash算法处理之后的Hash
2.不支持排序:
由于Hash索引中存放的是经过Hash计算之后的Hash值,而且Hash值的大小关系并不一定和Hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算
3.在任何时候都不能避免表扫描:
由于Hash索引比较的是进行Hash运算之后的Hash值,所以即使取满足某个Hash键值的数据的记录条数,也无法从Hash索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果
4.检索效率高,索引的检索可以一次定位,不像BTREE索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以Hash索引的查询效率要远高于BTREE索引