第七章 创建⾼性能的索引

简介: 第七章 创建⾼性能的索引

索引基础

索引可以包含⼀列或多列,顺序也⼗分重要,因为MySQL只能使⽤索引的最左前缀列。

索引的类型


BTree索引,⼀般使⽤B-tree索引,MySQL使⽤B+Tree,

B-Tree所有值都是按顺序排序的,B-tree是按照索引列中的数据⼤⼩顺序存储的,所以很适合按照范围来查询。


⾃适应hash索引,具有hash的优势,由MySQL⾃动⽣成


全值匹配

匹配索引的所有列.

匹配最左前缀

只使⽤索引的第⼀列。

匹配列前缀

只匹配某⼀列的开头部分。

匹配范围值

关于B-tree的限制

不是从最左列索引开始查找,不能使⽤索引。

不能跳过索引的列

如果某索引列中有范围查找,那么右边的索引列都不能

使⽤去优化查找


全⽂索引

是⼀种特殊的索引类型,适⽤于match against,⽽不是普通的where条件操作。

使⽤索引的优点

加速查找的过程,减少扫描⾏数,避免排序和临时表,将随机io转换成顺序io。

⾼性能索引的策略

前缀索引和索引的选择性

保证⼀定选择性的前缀索引,但是不能太⻓。

创建前缀索引 :

多列索引

最常⻅的问题就是为每⼀列都创建单独的索引。

使⽤or或者union时,优化器会使⽤多个索引的联合,索引合并说明了索引建⽴得很糟糕,需要耗费⼤量cpu资源,并且优化器会忽略这些查询成本,有时还不如全表扫描。

alter table t1 add key (

city(7))explain看到索引合并,检查语法和表结构。或者关闭索引功能,使⽤ignore index语法忽略索引。

选择合适的索引列顺序

经典法则:将选择性最⾼的索引放在符合索引的最前⾯。(不是全部都适合)

聚簇索引

聚簇表示数据⾏和索引的键值紧凑的存储在⼀起。⼀般根据主键聚簇数据,没有主键innodb选择⼀个⾮空的键,如果没有⾮空键就创建⼀个rowid,但是会导致锁竞争。

聚簇索引的优点:减少io次数,数据访问更快,更新聚簇索引的代价很⾼,会将⾏移动到新的位置。

聚簇索引可能导致全表扫⾯变慢,尤其是⻚⽐较稀疏的情况下。

⼆级索引需要两次查找。

使⽤⾃增主键做聚簇索引主键较好,使⽤uuid,由于uuid是随机的会导致插⼊时性能差。

使⽤uuid的⼀些缺点:

a. 频繁做⻚分裂

b. 造成⼤量随机io

c. 频繁⻚分裂导致⻚间隙,内存碎⽚。

最好插⼊后做⼀次optimize table 调整⼀下⻚。

什么时候按主键顺序插⼊性能较差?

在并发插⼊的情况下,可能间隙锁的竞争⼤。

覆盖索引

索引的叶⼦节点已经包含要查询的数据,就称为索引覆盖。

只有当索引的顺序和order by的顺序完全⼀致才能使⽤索引对结果排序。即使不满⾜索引的最左前缀要求,如果指定了最左的索引列为常数,也可以使⽤索引进⾏排序。

冗余和重复索引

删除冗余的索引,使⽤performance和sys数据库,查看

sys.schema_unused_indexs查看未使⽤的索引。

维护索引和表

由于⼀些硬件错误导致索引出现问题,可以使⽤check table来检查表的问题。

相关文章
|
存储 JSON NoSQL
Centos7下安装MongoDB
Centos7下安装MongoDB
595 0
Centos7下安装MongoDB
|
6月前
|
监控 容灾 测试技术
第三方API的稳定性如何保障?
第三方API的稳定性对电商至关重要,直接影响业务连续性和用户体验。为确保稳定,可采取以下措施:选择可靠提供商、评估技术架构高可用性、实现限流重试机制、实时监控预警、充分测试、优化网络连接、使用API网关、保持与提供商沟通、制定应急预案及定期评估改进。这些方法能有效提升API稳定性,保障业务高效运行和用户满意度。
203 0
|
11月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
252 7
|
敏捷开发 监控 数据可视化
2024年敏捷项目管理工具使用排行榜:哪些工具适合大型团队?
随着敏捷方法的普及,2024年的敏捷项目管理工具市场更加多样化,从团队协作到任务追踪,功能日益丰富。本文将评测六款热门工具:板栗看板、Wrike、Smartsheet、TeamGantt、Targetprocess和Airtable,分析其功能亮点、适用行业及优缺点,助力企业选择最适合的工具。
2024年敏捷项目管理工具使用排行榜:哪些工具适合大型团队?
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
安全 网络协议 Linux
Linux SSH:安全远程访问与管理
SSH(Secure Shell)是一种网络协议,广泛应用于Linux系统中,用于在不安全的网络中进行安全的远程访问和管理。SSH协议通过加密和身份认证机制,确保数据传输的安全性和用户身份的可靠性。本文将深入探讨Linux下的SSH协议,包括工作原理、配置、密钥认证、安全性措施以及实际应用等,帮助读者充分了解SSH的重要性,并学会在Linux系统中正确使用SSH实现安全远程访问和管理。
932 0
|
NoSQL Ubuntu MongoDB
在Ubuntu 16.04上安装和保护MongoDB的方法
在Ubuntu 16.04上安装和保护MongoDB的方法
220 1
|
存储 数据采集 算法
22年美赛c题-交易策略
22年美赛c题-交易策略
425 0
|
测试技术 Nacos Docker
xxl任务绑定一台服务器的两个项目
项目需在测试和生产环境自动注册到xxl服务。之前测试环境未注册,且手动注册。解决方案:修改xxl.nacos配置,设置xxl.job.executor.ip为特定IP,避免自动注册错误的IP。因同一机器上运行两个项目,需分配不同端口,如测试环境设为9997,并在docker运行命令中映射该端口。最后在阿里云开放9997端口并重启服务,实现自动注册。
232 1
|
Python
Python中如何定义函数 以及实参和形参的区别
Python中如何定义函数 以及实参和形参的区别
440 1