

mysql查询中利用索引的机制
source link: https://blogread.cn/it/article/5023?f=hot1
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

mysql查询中利用索引的机制
今天遇到一个奇怪的问题,明明已经建立了索引,select语句的explain也表明会利用这个索引,可是结果偏偏没有用索引,最后扫描了全表。
两个结构完全一样的sql语句:
sql1: select * from table where col_a = 123 and col_b in (‘foo’,\'bar’) order by id desc;
sql2: select * from table where col_a = 456 and col_b in (‘foo’,\'bar’) order by id desc;
结果sql1选择利用了col_a的索引,速度很快,sql2利用了主键ID的索引,扫描了全表(40w行)。
仔细分析,发现数据库中,col_a=456的记录数有近1万条,而col_a=123的记录数只有几条。
于是就清楚了,mysql选择索引不仅仅依据查询结构和索引结构,还会根据索引大概估算选择每种索引的数据量,然后选择他认为最快的索引。
可能是主键索引会比普通index更快,所以mysql最后选择了数据量跟大的id索引。
那么,如何解决这个问题呢?
很简单,只要在order语句里写多个键即可,比如:order by col_a, id desc
建议继续学习:
扫一扫订阅我的微信号:IT技术博客大学习
Recommend
-
47
-
46
目录 About MySQL Why MySQL MySQL Index Why Index 索引是如何工作的 如何使用 创建索引 查看索引 删除索引 索引的使用原则 写操作比较频繁的列慎重加索引 索引越多占用磁盘空间越大 不要为输出列加索引
-
28
点击上方 "IT牧场" ,选择 "设为星标" 技术干货每日送达! 来源:rrd.me/f9jAG 经常有同学...
-
15
来源:rrd.me/f9jAG 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询...
-
37
作者介绍 李猛(ynuosoft), Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对...
-
8
本文由 dbaplus 社群授权转载。 序言 Elasticsearch,中文名直译弹性搜索,不仅仅在单索引内部分片层面弹性搜索,更强的是在跨索引外围支持分片弹性搜索,同比其它分布式数据产品,此特性更鲜明,代表了 Elastic 集...
-
9
一文读懂MySQL的索引结构及查询优化 - 程序员八阿哥的个人空间 - OSCHINA - 中文开源技术交流社区 同时再次强调,这几篇关于MySQL的探究都是基于5.7版本,相关总结与结论不一定适用于其他版本) MySQL官方文档中(
-
10
经常有朋友问到:我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。...
-
3
sqlserver2016 内连接查询有索引居然table scan ...
-
6
1. MySQL 优化概述MySQL 优化是一个综合性的技术,在优化上存在着一个调优金字塔的说法,如下:很明显从图上可以看出,越往上走,难度越来越高,收益却是越来越小的。比如硬件和 OS 调优,需要对硬件和 OS 有着非常深刻的了解,仅仅就磁盘一项来说,...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK