【问题标题】:MySQL query optimization left join indexes existMySQL 查询优化左连接索引存在
【发布时间】:2013-03-20 23:29:39
【问题描述】:

我正在努力优化 MySQL 查询。

select * 
from course as t1 
left join semester as t3 on t1.semester=t3.id 
where t1.visibleFrom <= '1364621522' 
and '1364621522' <= t1.visibleTo 
order by t3.begin desc, t1.name;

EXPLAIN 报告这是为了在课程表上使用 ALL 查询。该表有几个不同的索引(visibleFrom、visibleTo、两者的组合、名称、学期)。 name 是一个 varchar 列,beginvisibleFromvisibleTo 是整数,也可以为空。

如果我省略了与t3 的连接并强制使用索引名称,它会以某种方式工作。

知道为什么这个查询不使用索引吗?

【问题讨论】:

    标签: mysql optimization indexing


    【解决方案1】:

    我认为WHERE中范围限制的重要索引是visibleFrom和visibleTo两列的索引,即

    ALTER TABLE `course` ADD INDEX ( `visibleFrom` , `visibleTo` );
    

    如果 MySQL 没有在您的查询中使用它,我的猜测是课程表的行数少于 ~ 100 行。因此,由于开销,MySQL 查询优化器决定不使用索引。只要课程表包含数百行,就应该使用索引。

    【讨论】:

      猜你喜欢
      • 2012-11-26
      • 2017-04-04
      • 2019-08-27
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多