我有一张至少5 GB的表,并且在几年内将会达到10 GB。其中一列是日期字段,用于广泛查询。它可以用作日期,年份,年月和月份,根据用户在界面中的设置进行过滤和分组。
WHERE yearmonth >= '201504' AND yearmonth <= '201506'
WHERE year > 2014
GROUP BY year, month ORDER BY year, month
SELECT MONTH(date)
在年,月,年中为查询提供最佳速度的索引的最佳方法是什么,而无需在表格中创建这些计算字段。
答案 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中的问题,我必须将选定的用户日期过滤条件转换为索引日期字段的公式。