最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql查询中利用索引的机制_MySQL

来源:动视网 责编:小采 时间:2020-11-09 19:12:57
文档

mysql查询中利用索引的机制_MySQL

mysql查询中利用索引的机制_MySQL:今天遇到一个奇怪的问题,明明已经建立了索引,select语句的explain也表明会利用这个索引,可是结果偏偏没有用索引,最后扫描了全表。 两个结构完全一样的sql语句: sql1: select * from table where col_a = 123 and col_b in (f
推荐度:
导读mysql查询中利用索引的机制_MySQL:今天遇到一个奇怪的问题,明明已经建立了索引,select语句的explain也表明会利用这个索引,可是结果偏偏没有用索引,最后扫描了全表。 两个结构完全一样的sql语句: sql1: select * from table where col_a = 123 and col_b in (f


今天遇到一个奇怪的问题,明明已经建立了索引,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

文档

mysql查询中利用索引的机制_MySQL

mysql查询中利用索引的机制_MySQL:今天遇到一个奇怪的问题,明明已经建立了索引,select语句的explain也表明会利用这个索引,可是结果偏偏没有用索引,最后扫描了全表。 两个结构完全一样的sql语句: sql1: select * from table where col_a = 123 and col_b in (f
推荐度:
标签: 查询 查找 使用
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top