2013-03-30 68 views
1

我正在努力優化MySQL查詢。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列,begin,visibleFromvisibleTo是也可以爲空的整數。

如果我忽略與t3的連接並強制使用索引名稱,它會以某種方式工作。

任何想法爲什麼這個查詢不使用索引?

回答

1

我認爲在WHERE範圍限制的重要指標是在兩列visibleFrom和visibleTo指數,即

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

如果MySQL不會在查詢中使用它,我的猜測是課程表有少於100行。因此,由於開銷,MySQL查詢優化器決定不使用索引。只要課程表包含幾百行,就應該使用索引。