【每日一记14】+第19天: 关于MySQL索引知识与小妙招(五)
  

易逝的信仰 1299

{{ttag.title}}
三、组合索引
当包含多个列作为索引,需要注意的是正确的顺序依赖于该索引的查询,同时需要考虑如何更好的满足排序和分组的需要
案例: 建立组合索引 a,b,c ,不同SQL语句使用索引情况
语句索引是否发挥作用
where a=3是,只使用了a
where a=3 and b=5是,使用了a,b
where a =3 and b = 5 and c= 4是,使用了a,b,c
where a = 3 or c = 4否
where a = 3 and c= 4是,仅使用了a
where a = 3 and b > 10 and c = 7是,使用了a,b
where a = 3 and b like '%mxn%' and c=7使用了a四、聚簇索引与非聚簇索引4.1 聚簇索引
  • 不是单独的索引类型,而是一种数据存储方式,指的是数据行跟相邻的键值紧凑的存储在一起,将数据存储与索引放到了一块,找到索引也就找到了数据
  • 如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有唯一索引,InnoDB会隐式定义一个主键来作为聚簇索引。InnoDB 只聚集在同一个页面中的记录。包含相邻健值的页面可能相距甚远。

4.2 非聚簇索引
  • 数据文件跟索引文件分开存放,将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因
  • 通过叶子节点指针找到数据页中的数据,所以非聚簇索引是逻辑顺序

五、覆盖索引5.1 基本介绍
  • 如果一个索引包含所有需要查询的字段的值,我们称之为覆盖索引
  • 不是所有类型的索引都可以称为覆盖索引,覆盖索引必须要存储索引列的值
  • 不同的存储实现覆盖索引的方式不同,不是所有的引擎都支持覆盖索引,memory不支持覆盖索引

5.2 优势
1、索引条目通常远小于数据行大小,如果只需要读取索引,那么mysql就会极大的较少数据访问量
2、因为索引是按照列值顺序存储的,所以对于IO密集型的范围查询会比随机从磁盘读取每一行数据的IO要少的多
3、一些存储引擎如MYISAM在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用,这可能会导致严重的性能问题
4、由于INNODB的聚簇索引,覆盖索引对INNODB表特别有用
5.3 案例演示
1、当发起一个被索引覆盖的查询时,在explain的extra列可以看到using index的信息,此时就使用了覆盖索引
2、在大多数存储引擎中,覆盖索引只能覆盖那些只访问索引中部分列的查询。不过,可以进一步的进行优化,可以使用innodb的二级索引来覆盖查询。
例如:actor使用innodb存储引擎,并在last_name字段又二级索引,虽然该索引的列不包括主键actor_id,但也能够用于对actor_id做覆盖查询

打赏鼓励作者,期待更多好文!

打赏
2人已打赏

gqce 发表于 2021-3-16 15:05
  
感谢分享
伊利丹·怒风 发表于 2021-5-8 14:18
  

感谢分享,有助于工作,学习学习
发表新帖
热门标签
全部标签>
2025年技术争霸赛
每日一问
功能体验
GIF动图学习
标准化排查
产品连连看
新版本体验
纪元平台
高手请过招
【 社区to talk】
2023技术争霸赛专题
每周精选
2024年技术争霸赛
社区新周刊
安全效果
信服课堂视频
畅聊IT
答题自测
专家问答
技术笔记
技术圆桌
在线直播
MVP
网络基础知识
安装部署配置
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
用户认证
原创分享
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
SDP百科
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
排障笔记本
产品预警公告
玩转零信任
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
卧龙计划
华北区拉练
天逸直播
以战代练
秒懂零信任
技术晨报
平台使用
技术盲盒
山东区技术晨报
文档捉虫
齐鲁TV
华北区交付直播
北京区每日一练
场景专题
故障笔记
排障那些事
西北区每日一问
升级&主动服务
高频问题集锦
POC测试案例
全能先锋系列
云化安全能力
专家说
热门活动
产品动态
行业实践
产品解析
关键解决方案

本版达人

feeling

本周分享达人

新手29676...

本周提问达人