如何使用日期计算优化查询

时间:2013-11-08 05:53:11

标签: mysql query-optimization

这是我的表结构(约1百万条记录):

index table

我需要在某些日期选择一些指数,但只有年份和月份相关:

SELECT `index_name`,`results` FROM `mst_ind` WHERE 
((`index_name`='MSCI EAFE Mid NR USD' AND MONTH(`date`) = 3 AND YEAR(`date`) = 2003) OR
(`index_name`='MSCI Morocco PR USD' AND MONTH(`date`) = 3 AND YEAR(`date`) = 2003))
AND `time_period`='M1'

它工作正常,但性能很糟糕。我通过分析器运行查询,但它无法建议任何可能的密钥。

主键包含index_id,date和time_period。

如何优化/改进此查询?

谢谢!

更新:解释报告: enter image description here

1 个答案:

答案 0 :(得分:0)

当您将转换应用于将使用MONTHYEAR等函数编制索引的字段时,您可能无法使用索引。 你可以:

  • 以不同方式编写WHERE子句,使其不使用MONTHYEAR函数,例如:

    date> ='2003-03-01'和date< '2003-04-01'

编辑:刚刚意识到你可能在这张桌子上没有任何索引。请考虑向index_namedatetime_period字段添加索引。