【案例】mysql创建索引中字段顺序的重要性(命中规则)

本文通过一个实际案例展示了在MySQL中创建索引时字段顺序的重要性。原本的联合索引(index_p1)顺序为(month_code, city_name, index_code, index_level),查询效率在1.3秒左右。当调整索引顺序为(index_p2, city_name, month_code, index_code, index_level),查询效率降低到0.02秒,因为正确的字段顺序能极大地减少数据搜索范围,提高查询效率。" 116137529,829513,CentOS7.6安装PaddleOCR详细步骤,"['Linux', '深度学习', 'OCR', '容器技术', 'Python库']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前只知道索引会让查询效率变快,各种博文也只是介绍触发联合索引的条件是在where条件里使用联合索引的全部索引键,可触发索引的使用。 但都没有提到在联合索引里设置的字段顺序会大大影响查询效率!!

拿一个简单的查询语句举例,我们想获取表a里特定城市(e.g.深圳)一年的某个指标值:

select month_code, dept_code, city_name, index_code, index_name, index_level, index_value

from table_a where month_code>= 202001 and month_code <= 202006

and city_name = 'shenzhen'  and index_code = 'CA001' and index_level = 3

如果不设置索引直接查询,大概要大概2秒左右。表table_a一个月10万数据量左右,一年就120w。

所以加了个联合索引,

alter table table_a add index index_p1(month_code,city_name,index_code,index_level)

加了之后查询效率还是在1.3秒左右,并没有快多少。我的索引都是where条件里的,是都命中了的,但索引提升的查询效率不应该只提高这么点的…这说明索引没有发挥很大的作用。还需要注意的是mysql中where条件里的字段顺序并不影响命中索引,它能够自动优化成索引识别的形式。

经过研究发现根本原因在于设置索引里的字段顺序,这个是个决定性因素。如果把索引设置为:

alter table table_a add index index_p2(city_name,month_code,ind

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值