MySQL索引

  • MySQL索引结构分析
  • 为何需要索引?
  • 什么是索引?
  • 索引原理
  • 索引数据结构
  • 索引正确使用
  • 参考


MySQL索引结构分析

为何需要索引?

为了解决对数据库加速查询。

什么是索引?

可以理解一本书的目录。索引在MySQL里叫“键“,是存储引擎快速找到记录的一种数据结构。

索引原理

本质通过不断缩小想要获取的数据的范围,最终得到结果。把随机事件变成固定事件。

索引数据结构

innodb mysql 索引存储在哪个文件中 mysql索引存储结构深入理解_MySQL 索引


索引结构就是B+树,一个平衡二叉树。查询过程如下:

如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之 间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。

B+树结构特点:

非叶子节点只存储键值信息。
所有叶子结点之间都有一个链指针。
数据记录都放在叶子节点。

索引正确使用

不正确的使用索引会带来相反的效果。如索引过多,加入不正确的索引等。

适用索引有一些技巧:

  1. 索引不会包含有NULL的列。
  2. 使用短索引。
  3. 索引列上排序,是不使用索引的。
  4. like ‘%aaa%’不会使用索引,而like ‘aaa%’可以使用索引。
  5. 不要在列上运算。
  6. 不使用NOT IN 、<>、!=操作,但<,<=,=,>,>=,BETWEEN,IN是可以用到索引。
  7. 索引要建立在经常进行select操作的字段上。
  8. 索引要建立在值比较唯一的字段上。
  9. 于那些定义为text、image和bit数据类型的列不应该增加索引。
  10. 在where和join中出现的列需要建立索引。
  11. 如果where字句的查询条件里使用了函数(如:where DAY(column)=…),mysql将无法使用索引。
  12. 在join操作中(需要从多个数据表提取数据时),mysql只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用。

多使用查询优化神器-explain