MySQL日期计算索引

时间:2015-12-09 18:12:41

标签: mysql

我有一张至少5 GB的表,并且在几年内将会达到10 GB。其中一列是日期字段,用于广泛查询。它可以用作日期,年份,年月和月份,根据用户在界面中的设置进行过滤和分组。

WHERE yearmonth >= '201504' AND yearmonth <= '201506'  
WHERE year > 2014  
GROUP BY year, month ORDER BY year, month  
SELECT MONTH(date)  

在年,月,年中为查询提供最佳速度的索引的最佳方法是什么,而无需在表格中创建这些计算字段。

2 个答案:

答案 0 :(得分:1)

Mysql 5.7已生成列功能,它们可以是虚拟的,但索引在:

ALTER TABLE yourtable ADD COLUMN date_month GENERATED ALWAYS AS MONTH(date) VIRTUAL;
ALTER TABLE yourtable ADD INDEX 'index_on_month' (date_month ASC);

答案 1 :(得分:0)

事实证明,MySQL无法在计算字段上编制索引。

我从FoxPro得到了这个想法,我可以做到这一点

INDEX ON MONTH(date) TAG month
INDEX ON YEAR(date) TAG year

因此,要解决MySQL中的问题,我必须将选定的用户日期过滤条件转换为索引日期字段的公式。