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

相关推荐
CoderYanger2 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE5 小时前
11.7[高体】
java·后端·spring
apcipot_rain6 小时前
C++转Java日记(04)
java·开发语言·c++
特立独行的猫A6 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
憧憬成为java架构高手的小白8 小时前
LangGraph4j 实战(下)
java
天诰8 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
这个昵称不容易12 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长12 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
文丑颜不良啊13 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼13 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发