0

这是我的表结构(大约 100 万条记录):

索引表

我需要在某些日期选择一些索引,但只有年和月是相关的:

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。

如何优化/改进此查询?

谢谢!

更新:解释报告: 在此处输入图像描述

4

1 回答 1

0

MONTH当您将转换应用于将通过使用和之类的函数进行索引的字段时,您可能会使索引的使用无效YEAR。你可以:

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

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

编辑:刚刚意识到您可能在此表上没有任何索引。考虑向index_name,datetime_period字段添加索引。

于 2013-11-08T06:08:49.747 回答