mysql 之数据结构和索引失效

 MySQL 底层的数据结构是B+树,展开来讲,为什么不是哈希索引,为什么不是平衡二叉树,为什么不是b树。

 

哈希索引

 优点:

  查找效率高

缺点:

  无序,所以不能进行范围查找(大于、小于)、不能排序

 

平衡二叉树特点:

  左侧树和右侧树比较平衡,两树相差的高度不会大于1

  

缺点:

  随着树的高度增加,查找速度越慢

  回旋查找更慢,如范围查找情况

 

B树特点:

  可以一个节点存储2个值(解决平衡二叉树高度问题,查找数据更快)

  

 

B+树特点:

  B树的基础上,多了箭头,也构成了单向链表,把所有的树进行了一个链表的排序(解决回旋查找问题,提高了范围查找、排序速度)

  

 

上图是单值索引,下面讲一下联合索引:      

  

 在a相等的情况下b有序,b无序时索引失效。所以使用联合索引时,要遵循最佳左前缀法则: 

  

explain命令使用

 

索性失效无非就2种情况:

  1.破坏了索性结构导致索引无法使用;

  2.全表扫描比走索引快。索引只是加快查询效率的手段,mysql内部判断走全表比走索引快为啥还要走索引,所以索引就失效了。

  3.看数据库版本(之前的版本默认引擎是myisam,之后是innodb)

为了方便记忆,索引失效七字诀:模型数空运最快

模:模糊查询LIKE以%开头
型:数据类型错误
数:对索引字段使用内部函数
空:索引列是NULL
运:索引列进行四则运算
最:复合索引不按索引列最左开始查找
快:全表查找预计比索引更快
比如:>、or、in、!=、is not null等,索引就会失效
exists 替代 in
当子查询[内部表]数据量比外部表大时,exists 的效率要优于 in,反之

 

 

学习路径:

https://www.bilibili.com/video/BV1yT4y1w7FS?spm_id_from=333.337.search-card.all.click

https://blog.csdn.net/qq_45814695/article/details/117171536

posted @ 2022-03-25 14:08  kueizheng  阅读(133)  评论(0编辑  收藏  举报