• 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

    学习路径:

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

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

  • 相关阅读:
    模块的种类和导入方法
    小知识点补充
    9.17模拟赛2.0
    hdu2181 哈密顿绕行世界问题
    9.17模拟赛
    9.15模拟赛
    P1084 疫情控制
    9.14模拟赛
    【bzoj1232】[Usaco2008Nov]安慰奶牛cheer
    P3128 [USACO15DEC]最大流Max Flow
  • 原文地址:https://www.cnblogs.com/Allofus/p/16053614.html
Copyright © 2020-2023  润新知