Mysql索引总结

索引分类

哈希索引 B-tree索引 B+tree索引

哈希索引与B树索引区别

  1. 哈希索引存在哈希冲突,一般解决冲突的方法是链地址法,即发生冲突时,形成链表。但链表的存在会降低查询效率;
  2. 哈希索引对于单个的值查找非常快;
  3. 哈希索引无法进行范围查找,以及对数据进行排序;
  4. B树索引查询效率不如哈希索引,但是支持范围查找以及排序;

B-树与B+树的区别

  1. 主要区别是在于数据存储方式不同;
  2. B-树的所有节点,既存放key,也存放data,B+树只有叶子节点存放key和data,其他节点只存放key;
  3. B-树的叶子节点是独立的,B+树的叶子节点有一条引用链指向与它相邻的叶子节点;
  4. B-树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。

聚簇索引与非聚簇索引

聚簇索引:聚集索引即索引结构和数据一起存放的索引

优缺点:

  1. 聚集索引的查询速度非常的快,因为整个 B+树本身就是一颗多叉平衡树,叶子节点也都是有序的,定位到索引的节点,就相当于定位到了数据。
  2. 依赖于有序的数据 :因为 B+树是多路平衡树,如果索引的数据不是有序的,那么就需要在插入时排序,如果数据是整型还好,否则类似于字符串或 UUID 这种又长又难比较的数据,插入或查找的速度肯定比较慢。
  3. 更新代价大 : 如果对索引列的数据被修改时,那么对应的索引也将会被修改,而且聚集索引的叶子节点还存放着数据,修改代价肯定是较大的,所以对于主键索引来说,主键一般都是不可被修改的。

非聚簇索引:非聚集索引即索引结构和数据分开存放的索引

优缺点:

  1. 更新代价比聚集索引要小 。非聚集索引的更新代价就没有聚集索引那么大了,非聚集索引的叶子节点是不存放数据的。
  2. 跟聚集索引一样,非聚集索引也依赖于有序的数据。
  3. 可能会二次查询(回表) :这应该是非聚集索引最大的缺点了。 当查到索引对应的指针或主键后,可能还需要根据指针或主键再到数据文件或表中查询。

主键索引与辅助索引

主键索引:数据表的主键列使用的就是主键索引,叶子节点存储的是除主键外的数据行

辅助索引:叶子节点存储的数据是主键,通过索引,定位主键的位置

覆盖索引

覆盖索引:覆盖索引即需要查询的字段正好是索引的字段,那么直接根据该索引,就可以查到数据了, 而无需回表查询。

索引下推

索引下推:索引下推是 MySQL 5.6 版本中提供的一项索引优化功能,可以在非聚簇索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表次数。

索引失效的条件

  1. 使用 is null
  2. 使用!= 或者 <> 导致索引失效
  3. mysql的隐式转换,类型不一致导致的索引失效,如:int 和varchar
  4. 函数导致的索引失效
  5. 运算符导致的索引失效
  6. OR引起的索引失效
  7. 模糊搜索导致的索引失效
  8. 使用NOT IN、NOT EXISTS导致索引失效
  9. 对联合索引来说,查询条件不符合最左前缀匹配原则
posted @   初见洞洞拐  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示