mongodb性能调优 1.从慢查询分析索引 2.掌握索引最左匹配原则!!!

案例:

top one: 所以不合适,使用最左匹配原则。

top three: 值是唯一的,但是没有索引。

解决后:

总结:


最左匹配:

理解为啥会有最左匹配原则:

a字段是有序的:1,1,2,3,4

b: 1,2,2,5,1

会先对a字段排序,然后再对b字段排序,那么单纯的: b=2进行查询,是没办法用到索引的。

理解最左匹配:假如有(a,b) 这么一个联合索引的话,查询语句一定要有a字段,否则会进行全表扫描 (但是8.0中有索引跳跃扫描走了索引,但是如果a字段很多,那效率就很低了!!!)。


通过递归生成测试数据

col1和col2都有,则说明用到了索引,并且key_len为10

只有字段col1也可以走索引, key_len为5

只有col2,则没有走索引,走了全表扫描!!!

理解原因:也就是先按照col1排序,但是col2的话,是没有关联的,只能全表扫描

可以看出col1是等值, col2是范围 那也可以用到索引,因为:先找到col1的,col2的往后找就行。

改为 > 100时,没有走!!! 因为绝大多数可能都大于100,所以没走,所以走索引再回表还是直接全表扫描呢?

大一点就走了,说明: 大宇1W的,可能也就10条,优化器认为:走索引好。

左边是确定的,则走了索引。

右边是确定的,则不走。

也就是:遵循最左索引的规则上,减少索引数量。

也就是(col1, col2) + (col2) 这样子建2个索引。

相关推荐
IT爱学堂8 小时前
java版数据结构和算法+AI算法和技能学习指南
java·开发语言
evans在进步9 小时前
LeetCode 394:字符串解码——Java 单栈模拟与嵌套解析详解
java·python·leetcode
m0_547486669 小时前
《Java程序设计与实践 》全套PPT课件2026
java·开发语言
土司大王10 小时前
LeetCode hto100——字母异位词分组
java·算法·leetcode
码匠许师傅10 小时前
【C++ 面试真题】聊聊 C++ 中的 lambda 表达式
java·c++·面试
QCodingDev11 小时前
Spring AI Alibaba ReAct Agent实战:从Tool Calling到Agent,企业AI复杂业务该如何设计?
java·人工智能·agent·ai编程·spring ai
RainCity11 小时前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
赵广陆12 小时前
企业实战:Markdown图片检索
android·java·开发语言
C++、Java和Python的菜鸟12 小时前
第3章 从0开始用若依
java·开发语言
Json____12 小时前
五金制品行业-企业官网源码
java·大数据·数据库·企业站·wwwoop.com