当前位置:  开发笔记 > 后端 > 正文

慢速MySQL(InnoDB)查询尽管加入了索引键,为什么?

如何解决《慢速MySQL(InnoDB)查询尽管加入了索引键,为什么?》经验,为你挑选了1个好方法。

你知道为什么这个请求可能很慢(在一个快速的MySQL服务器上1.7秒):

SELECT DISTINCT TABLE_A.keyA 
FROM TABLE_A,TABLE_B 
WHERE TABLE_A.keyB= TABLE_B.keyB 
AND TABLE_A.fieldC in (0,2,5,7,8) LIMIT 20;

由此执行计划给出EXPLAIN:

id    select_type table       type    possible_keys         key                   key_len   ref     rows     Extra 
1     SIMPLE      TABLE_B     index   PRIMARY               PRIMARY               8     NULL      10     Using index; Using temporary
1     SIMPLE      TABLE_A     ref     IDX_TABLE_A_KEY_B     IDX_TABLE_A_KEY_B     8     TABLE_B.keyB     25455     Using where

其他要素:

表TABLE_A有300 000行

TABLE_A.keyA是TABLE_A的主键

TABLE_A.keyB是朝向TABLE_B的主键keyB的外键; 表TABLE_B有10行;

99%的TABLE_A具有fieldC = 1并且该表的1%在(0,2,5,7,8)中具有fieldC(这就是为什么该字段没有被索引; EDIT该子句没有问题,因为具有相同的SELECT子句但没有与TABLE_B的连接很快);

在我看来,JOIN是有罪的,因为表上的一个简单的SELECT很快;

与另一个表连接TABLE_C也很慢;

MySQL版本:5.1.23a-maria-alpha

你有什么主意吗?



1> Thilo..:

99%的TABLE_A有fieldC = 1,表的1%在(0,2,5,7,8)中有fieldC(这就是为什么这个字段没有索引的原因)

这是索引该列的一个很好的理由.您的查询只需要不到1%的表,因此索引非常有选择性.

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有