您好,匿名用户
随意问技术百科期待您的加入

为什么 MySQL 不用我期望的索引?

0 投票

我们的 MySQL(Percona Server) 数据库有一个很大的表,1000多万条记录,我发现有很多类似的慢查询,40来秒:

      SELECT col1, Seller, col3, col4, Id, col5  
        FROM table1 
       WHERE Seller = 346761 
         AND col1 IN (2, 3, 4) 
         AND col3 = 1  
         AND col4 NOT IN (5,6,7)  
    ORDER BY Id DESC 
       LIMIT 0, 20;

我发现在 Seller, and col1, col3, col4 这几个列已经建了独立索引。 Id 是主键。

EXPLAIN 显示 MySQL 查询这个语句的时候使用了 Primary key 索引, 而不是 Seller。

+----+-------------+------------------+-------+--------------------+---------+---------+------+------+-------------+
| id | select_type | table            | type  | possible_keys      | key     | key_len | ref  | rows | Extra       |
+----+-------------+------------------+-------+--------------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | trans_audit_list | index | Seller,AuditStatus | PRIMARY | 8       | NULL | 1483 | Using where | 
+----+-------------+------------------+-------+--------------------+---------+---------+------+------+-------------+

我感觉这个查询如果用 Seller 上的索引会很快,果然,我强制 force index (Seller), 就只用 0.7 秒。
为什么 MySQL 不用 Seller 上的索引,感觉使用这个索引是很显然的。

是不是因为指定了 order by Id, Id 是主键,所以 MySQL 就用主键索引了?

另外:我发现如果不加上 Limit 语句,就会使用 Seller 索引,查询会非常快。

用户头像 提问 2014年 3月19日 @ Morgana 上等兵 (251 威望)
分享到:

你的回答

隐私保护: 您的邮箱仅用于发送系统通知。
请输入验证码:
    图片验证码看不清?
登录注册后不会被要求输入验证码。

提一个问题:

相关问题

0 投票
1 回复 45 阅读
0 投票
0 回复 13 阅读
用户头像 提问 2013年 11月15日 @ Lucian 列兵 (86 威望)
0 投票
0 回复 22 阅读
用户头像 提问 2012年 12月1日 @ Aries 上等兵 (238 威望)
0 投票
1 回复 50 阅读
用户头像 提问 2012年 12月1日 @ Veigar 上等兵 (210 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...