在MySql中添加索引到日期字符串字段

时间:2018-04-25 05:16:55

标签: mysql string date

我有一张约有2百万条记录的表格。它有一个日期值为String格式的列(类似格式)。现在我需要根据此字符串日期列过滤记录。我尝试使用STR_TO_DATE,但要获取记录需要很长时间,因为此列没有INDEX。 任何人都可以帮我添加Index吗?

1 个答案:

答案 0 :(得分:0)

在谓词中包装函数中的列会强制MySQL评估每一行的函数,从而有效地禁用可能更有效的索引搜索或范围扫描。

例如,MySQL无法使用此

进行索引范围扫描
... FROM t WHERE STR_TO_DATE(t.mycol,'%Y-%m-%d') = '2018-04-23'
                 ^^^^^^^^^^^^       ^^^^^^^^^^^^

但是让SQL引用成为一个裸列将允许MySQL考虑在适当的索引上使用范围扫描操作......

... FROM t WHERE t.mycol = DATE_FORMAT('2018-04-23','%Y-%m-%d') 
                 ^^^^^^^

后一个查询的合适索引的第一次剪切将是

   CREATE INDEX t_IX1 ON t (mycol) 

这不一定是查询的最佳索引。这真的取决于查询。例如,覆盖索引可能是更合适的选择。

问题提到将“日期”值存储为字符串,可能意味着CHAR或VARCHAR数据类型。请注意,MySQL实现了一个本机DATE数据类型,它是为了存储“日期”值而自定义设计的。