简介
索引是用于快速找到记录的一种数据结构
索引值匹配的方式
1.全值匹配(所有的列都进行匹配)
2.匹配最左前缀(只使用索引的第一列)
3.匹配列前缀(只匹配某一列值开头部分)
3.匹配范围值(查找值为某一范围时,只使用第一列)
4.覆盖索引(只访问索引,不访问数据行)
索引的优点
1.减少需扫描的数据量
2.避免排序和临时表
3.将随机IO表为顺序IO
索引类型
在mysql中,索引由存储引擎实现,不同的存储引擎索引的工作方式不同,底层实现不同。
mysql最常用的存储引擎是MyISAM和InnoDB。
1.B-Tree索引
B-Tree索引值按顺序排序,很适合查找范围数据。
索引多列值排序根据create table语句定义时的顺序决定。
B-Tree树能加快访问数据的速度,是因为使用了索引就不用进行全表扫描来获得数据。
根节点存放了指向子节点的指针,且叶子到根的距离相同,可通过指针查找叶子页,进而根据叶子页的上下限的值从而决定进入下一个叶子页。
对于B-Tree索引,InnoDB通过B+Tree实现,InnoDB按照原数据格式进行存储,
MyISAM使用前缀压缩技术,所以实际存储比较小,通过数据的物理位置引用被索引的行。
B-Tree索引使用限制
1.只能按匹配最左前缀的方式即,必须包含索引最前列
2.不能跳过索引中的列
3.某个列时范围值,则其后的所有索引都不能使用
2.哈希索引
哈希索引基于哈希表实现,需要精确匹配索引的所有列值才能生效,每一行数据都被存储引擎赋予一个哈希码,通过不同的键值索引得到哈希码,从而在哈希表中找到指向数据行的指针。
mysql中只有memory索引支持哈希索引。InnoDB有自适应哈希索引功能,当索引值使用很频繁时,可以在B-Tree上创建哈希索引。这个功能无需用户设置,由系统自行启动使用。