【问题标题】:MySQL - Not using IndexMySQL - 不使用索引
【发布时间】:2009-10-23 14:35:32
【问题描述】:

我正试图找出我可能做错了什么。这个查询似乎没有使用索引,因为它需要很长时间。

执行时:

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 秒.. 似乎应该不到一秒。

谢谢!

【问题讨论】:

  • SHOW CREATE TABLE yourtablename; 的输出是什么?
  • 是字符串还是数字?
  • 当我尝试时,它显示了一个小的创建表执行程序的 sn-p,我认为我的服务器没有打开(完全调试?)选项。
  • 仅供参考:如果您的表只有少量行,查询优化器有时会决定不使用索引,因为全表扫描会更快。您的表格的行数是否较少?
  • Chaos-> 感谢您提供有关分区的信息,也将使用它

标签: sql mysql performance


【解决方案1】:

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

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

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

【讨论】:

  • 没关系,你会惊讶于我遇到这种情况的频率。许多程序员不知道选择不使用引号的后果。
【解决方案2】:

如果 d 是 varchar,则需要将其放在引号中。省略引号将无法正确使用索引。

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2013-04-07
    • 2013-07-10
    • 2012-12-31
    • 2013-12-07
    相关资源
    最近更新 更多