为YEAR()函数创建索引

时间:2018-04-20 15:23:38

标签: mysql sql

我正在尝试加速查询。此查询查看年份是否为“2017”。我正在比较使用:LIKE = '2017%'YEAR (date) = '2017'date BETWEEN '2017-1-1' AND '2017-12-31'之间的成本核算。

我想为colum日期做一个索引但是使用函数year,类似于:

CREATE INDEX indexDATE ON
table (YEAR(date));  

这可能吗?

1 个答案:

答案 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在逻辑上是正确的 - 一旦删除了数字周围的单引号。但是,在列上使用该函数会排除使用索引。

最后,在大多数数据集中,年份不是很有选择性。也就是说,您仍然会选择大部分行。索引对此类查询不太有用。