我正在尝试加速查询。此查询查看年份是否为“2017”。我正在比较使用:LIKE = '2017%'
,YEAR (date) = '2017'
和date BETWEEN '2017-1-1' AND '2017-12-31'
之间的成本核算。
我想为colum日期做一个索引但是使用函数year,类似于:
CREATE INDEX indexDATE ON
table (YEAR(date));
这可能吗?
答案 0 :(得分:2)
表达逻辑的正确方法是:
date BETWEEN '2017-01-01' AND '2017-12-31'
或者我更喜欢:
date >= '2017-01-01' AND date < '2018-01-01'
这可以使用(date)
上的索引。
表达式LIKE = '2017%'
只是编码错误。您正在日期/时间列上使用字符串函数。这是一个非常糟糕的主意,它排除了索引的使用。
表达式YEAR (date) = 2017
在逻辑上是正确的 - 一旦删除了数字周围的单引号。但是,在列上使用该函数会排除使用索引。
最后,在大多数数据集中,年份不是很有选择性。也就是说,您仍然会选择大部分行。索引对此类查询不太有用。