MySQL - 不使用索引

时间:2009-10-23 14:35:32

标签: sql mysql performance

我想弄明白我可能做错了什么。此查询似乎没有使用索引,因为它取代了长。

执行时:

Explain SELECT a, b, c, d  FROM `table` WHERE d = 4013456

id       select_type     table       type    possible_keys       key     key_len     ref     rows    Extra`
1      SIMPLE          table       ALL     d                   NULL    NULL     NULL    79787   Using where`
index:
d    INDEX       79787

我有什么问题吗?解释中的查询花了10秒钟......好像应该花不到一秒钟。

谢谢!

2 个答案:

答案 0 :(得分:7)

您的索引未被使用的原因是因为dvarchar(您在评论中提到过这一点)并且您的where子句中有一个整数。如果您将查询更改为:

SELECT a, b, c, d  FROM `table` WHERE d = '4013456';

它更有可能使用索引。但更好的解决方案可能是将列更改为整数并保留查询(如果在其他情况下可能的话)。

答案 1 :(得分:2)

如果d是varchar,则需要将其放在引号中。保留引号不会正确使用索引。