高并发之存储篇:关注下索引原理和优化吧!躲得过实践,躲不过面试官!( 四 )
(2)用于范围匹配的字段的索引位置要严谨 。 因为创建索引的时候 , 根据索引字段的顺序来进行排序 , 如果把time字段放在type字段前面建索引 , 在查询时 , 因为time是一个范围值 , 那么多个time值延续到type字段 , 整体是无序的 , 无法用到type索引 。
8蚂蚁分布式主事务表的索引运用
蚂蚁的分布式事务中的主事务表起到了维护整体事务状态的作用 , 其中包含了整体事务状态、操作时间等字段 。 而在业务支付发生异常 , 且实时回滚失败时 , 需要事务恢复系统从远程捞取前1分钟的异常数据 , 并捞取对应的分支记录表发起异步回滚 。
考虑查询效率 , 查询sql会限定业务发生时间在[前10分钟 , 前1分钟] , 是有范围查询 , 所以 , 针对其他字段 , 业务时间的索引顺序需要置于联合索引的最后 。 此操作的原理和上一部分美团定时任务的原理是一样的 。
9阿里开发手册中几条典型的规范 [4]
【强制】在 varchar 字段上建立索引时 , 必须指定索引长度 , 没必要对全字段建立索引 , 根据实际文本区分度决定索引长度 。
原理关联:字段越长 , 索引占内存越多 , 只要其长度可以保证区分度即可
【强制】字符搜索严禁左模糊或者全模糊 , 如果需要请走搜索引擎来解决 。
原理关联:左模糊的字段不是有序的 , 无法用到索引
【推荐】如果有 order by 的场景 , 请注意利用索引的有序性 。 order by 最后的字段是组合索引的一部分 , 并且放在索引组合顺序的最后 , 避免出现 file_sort 的情况 , 影响查询性能 。
原理关联:如果条件中有范围查询 , 则后续字段是无序的 , order by时无法用到索引
【推荐】建组合索引的时候 , 区分度最高的在最左边 。
原理关联:区分度越高 , 查询路径越短 , 效率越高
等等 , 参见阿里Java开发手册
Part5总结
本文从MySQL的存储结构、索引的设计思路演进、美团阿里大型系统索引使用等几个部分 , 阐述了索引的原理和对业务系统的重要作用 。
当然 , 对于高并发下的数据库的优化远不止索引优化这一个方面 , 本文只从索引这一个点出发 , 让大家对其优化原理和优化方向有一个大致的概念 , 在业务发展遇到数据库瓶颈时能有所帮助 。
参考资料
[1]
MySQL技术内幕: 机械工业出版社
[2]
MySQL 是怎样运行的: 掘金小册
[3]
MySQL索引原理及慢查询优化: https://tech.meituan.com/2014/06/30/mysql-index.html
[4]
阿里Java开发手册: 阿里巴巴
- EOF -
点击标题可跳转
1、 如何查看 sql 查询是否用到索引 ( mysql )
2、 高并发下如何保证接口的幂等性?
- 火星|我国打造太空核反应堆,功率高达一兆瓦,可为月球和火星基地供电
- 高通骁龙|LG 48英寸OLED电视降价,已不足9000,很多人拿来当显示器用
- 显微镜|肥皂泡破裂时温度达2万℃,高过太阳温度,为何不烫?
- 世界卫生组织|宇宙有哪些高能事件,你知道吗?
- 相机|了解眼睛有多神奇:人眼像素高达5.76亿,意味着什么?
- 汽车|手机已经容不下高通了
- 红米手机|5000mAh+90Hz高刷+128G储存,现在仅售1199元,性价比太高
- 高通骁龙|全部配备骁龙778G与5000毫安电池,这三款手机高度‘套娃’
- iphone12|它是4000左右性价比最高的iPhone之一,买它不后悔!
- 荣耀|首发高通新U!荣耀60真机上手:配色惊艳 颜值拉满