在mysql中,对于量级较多的数据表增加索引,可大大优化查询的效率。索引的类型分为Btree索引与hash索引。下面用简短的篇幅来介绍两种索引的说明与区别。
未使用索引实现原理
比如员工表中有100条数据,记录了员工id和姓名等资料。如果想找到姓名为张三的数据,则会在数据表中逐行扫描,检索出所有姓名为张三的员工数据。
使用了B-tree索引
Btree索引会在表的内部建立一个索引树,如果字典的目录一般,通过折中排除确认方式来定位索引键值,根据得到的磁盘指定位置去磁盘查找,返回数据。
使用了hash索引
hash索引根据一定的hash算法,将键值换算成新的哈希值,只需一次哈希算法即可定位到对应的位置。而不需要像Btree索引那样逐级查找,理论上可以一次找到。
区别和使用场景
如果等值查询,比如姓名等于张三,id等于5,此时hash索引具有优势。如果范围查询,比如id大于5且id小于10范围的,hash则用武之地。hash也无法利用索引完成排序。hash也不支持多列联合索引的最左原则。有大量重复值的情况下,hash索引也是效率极低,因为会出现hash碰撞问题。