MySQL查询优化左连接索引存在

时间:2013-03-30 09:56:57

标签: mysql optimization indexing

我正在努力优化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是也可以为null的整数。

如果我遗漏了t3的联接并强制使用索引名称,它会以某种方式工作。

为什么此查询不使用索引的任何想法?

1 个答案:

答案 0 :(得分:1)

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

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

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