首頁  >  文章  >  資料庫  >  mysql查询中利用索引的机制_MySQL

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

WBOY
WBOY原創
2016-06-01 13:16:371178瀏覽

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn