什么是索引?
MySQL官方对于索引的定义是:索引使可以帮助高效获取数据的数据结构。即索引是数据结构。
数据库在执行查询的时候,如何没有索引存在的情况下,会采用全表扫描的方式进行查找。如果存在索引,则会先去索引列表中定位到特定的行或者直接定位到数据,从而可以极大地减少查询的行数,增加查询速度。
可以类比为一部字典开头的目录。
索引是哪种数据结构?
1️⃣二叉树、红黑树?
优点:二叉树中的每一个元素保存了相应行数据的磁盘地址,通过该磁盘地址,便可以定位到对应行的数据。只需要几次查询即可查到该索引数据。
缺点:但是当数据量比较大,页的数目很多时,二叉树的高度会比较高。IO 的次数会比较多(查询一层需要一次IO)。查找效率低。
2️⃣Hash表?
优点:把key通过一个=固定的运算转换成一个数字,然后将这个数字对数组的长度取余,最终的结果就当做数组的下标。对应的数据就放在该下标处。如果hash表作为索引,其查询效率也是很高的。
缺点:
- hash索引仅能够查找=,in 等查找,无法进行范围查找。
- hash索引无法用来进行排序(经过运算过后的数字大小和原本数字大小没有关系)
- 如果设置了若干字段的一个组合索引,那么hash索引无法利用部分字段进行索引查找ÿ