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个索引。

相关推荐
Ai拆代码的曹操1 小时前
Spring 事务 REQUIRES_NEW 嵌套调用:连接池翻倍的秘密
java·后端·spring
动恰客流统计2 小时前
ReID边缘计算视觉统计:餐饮店客流增长的数字化破局路径
java·大数据·运维·人工智能
Ivanqhz3 小时前
Rust &‘static str浅析
java·前端·javascript·rust
weixin_419658315 小时前
Docker 搭建 Jenkins 服务
java·docker·jenkins
captain3766 小时前
多线程线程安全问题
java·java-ee
CoderYanger6 小时前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
灵极海6 小时前
LangChain4j RAG 实战完整指南:从入门到踩坑
java·langchain
yaoxin5211236 小时前
476. Java 反射 - 调用方法
java·开发语言
Ivanqhz7 小时前
Rust Lazy浅析
java·javascript·rust
bksczm8 小时前
Linux之日志和线程池、内存池
java·开发语言