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.  非叶子节点只存储键值信息。
    
  2.  所有叶子结点之间都有一个链指针。
    
  3.  数据记录都放在叶子节点。
    

索引正确使用

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

适用索引有一些技巧:

  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

参考

[1]:

猜你喜欢

转载自blog.csdn.net/qq_43612528/article/details/88422816