【MySQL|进阶篇】索引

摘要:

        本文简单介绍了MySQL索引的核心知识,包括两种主要索引结构:B+树索引(支持排序和范围查询)和哈希索引(高效查找)。重点分析了索引使用法则,特别是联合索引的最左前缀原则及其失效场景(如范围查询、列运算、模糊查询等)。同时提出了9大优化策略,包括避免索引列运算、使用覆盖索引减少回表查询等。通过explain语句进行SQL性能分析,并介绍了SQL提示等高级优化技巧,帮助开发者合理使用索引提升查询效率。

一,简单介绍

索引(index)是一种能够使mysql快速获取数据的数据结构(有序)。

二,索引结构

1,B+tree

优化B+树的存储节点为双向链表,方便排序和范围查询

         [内部节点]
        /    |    \
       ▼     ▼     ▼
[叶子节点] ↔ [叶子节点] ↔ [叶子节点]
(含实际数据)    (链表连接)    (有序排列)
 
  • 内部节点仅存储键值子节点指针
  • 叶子节点存储实际数据数据指针,并通过链表连接相邻叶子节点

2,Hash

索引 0: ∅
索引 1: ∅
索引 2: ➔ ["apple",10]  
索引 3: ➔ ["cherry",30] ➔ ["date",40]
索引 4: ∅
索引 5: ➔ ["banana",20]
 

 优点:

(1)高效查找与操作

(2)灵活的键类型支持

(3)动态空间管理

三,对比与思考

补充:存放数据的叶子节点维护了一个双向循环链表,便于排序和范围查询

四,sql性能分析(explain语句)

五,索引使用

最左前缀法则(联合索引)

        查询从索引的最左列开始,最左边的索引字段必须存在,并且不跳过中间在索引中的列,如果跳过了索引中间的某一列,索引会部分失效。

1,范围查询(联合索引)

        出现范围查询(>,<),范围右侧的列索引失效,如果范围使用(>=,<=)可以避免右侧索引失效

2,索引列运算

        不要在索引列上进行运算操作,索引将会失效,如截取函数substring()...等

3,字符串不加引号

        字符串类型字段使用时,不加引号,索引将失效

4,模糊查询

        尾部模糊不会影响,如果是头部模糊,索引失效

5,or条件查询

        如果查询条件出现or,or的只有一侧条件有索引,索引失效

6,数据分布影响

        如果MYSQL评估使用索引比全表更慢,则不使用索引

7,SQL提示

        在SQL语句中人为地加入一些提示来优化操作(use/ignore/force index())指定索引

8,覆盖索引

        本质就是避免索引查询出现回表查询,导致索引多搜寻一次,增加性能消耗,尽量不要使用select * ....进行查询

9,总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值