Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为YEAR()函数创建索引_Mysql_Sql - Fatal编程技术网

Mysql 为YEAR()函数创建索引

Mysql 为YEAR()函数创建索引,mysql,sql,Mysql,Sql,我正试图加快查询速度。此查询查看年份是否为“2017”。我正在比较使用:LIKE='2017%',年份(日期)='2017'和日期之间的成本,这些日期介于'2017-1-1'和'2017-12-31' 我想为colum日期制作索引,但使用功能年,类似于: CREATE INDEX indexDATE ON table (YEAR(date)); 这可能吗?表达逻辑的正确方式是: date BETWEEN '2017-01-01' AND '2017-12-31' 或者如我所愿: date

我正试图加快查询速度。此查询查看年份是否为“2017”。我正在比较使用:
LIKE='2017%'
年份(日期)='2017'
日期之间的成本,这些日期介于'2017-1-1'和'2017-12-31'

我想为colum日期制作索引,但使用功能年,类似于:

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

这可能吗?

表达逻辑的正确方式是:

date BETWEEN '2017-01-01' AND '2017-12-31'
或者如我所愿:

date >= '2017-01-01' AND date < '2018-01-01'
日期>='2017-01-01'和日期<'2018-01-01'
这可以使用
(日期)
上的索引

表达式
LIKE='2017%'
简直是糟糕的编码。您正在日期/时间列上使用字符串函数。这是一个非常糟糕的想法,它排除了索引的使用

表达式
YEAR(date)=2017
在逻辑上是可以的——只要删除数字周围的单引号。但是,在列上使用函数会阻止使用索引


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

您可能希望创建物化视图是的,我知道,但如果可能,我希望创建索引。如果没有更多的选择,我会去做。