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

标签 mysql string date

我有一个包含大约 200 万条记录的表。它有一列包含 String 格式(类似格式)的日期值。现在我需要根据这个字符串日期列过滤记录。我尝试使用 STR_TO_DATE,但需要很长时间才能获取记录,因为该列没有 INDEX。 谁能帮我添加一个索引到它?

最佳答案

将函数中的列包装在谓词中会强制 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 实现了 native DATE 数据类型,该数据类型是为存储“日期”值而定制设计的。

关于mysql - 在MySql中添加索引到日期字符串字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014493/

相关文章:

php - 如何在php中停止数据自动插入数据库

java - MySQL JDBC 问题

javascript - 替换文本区域中特定位置的字符

java - 文字被截断?

iphone - Objective C - 将对象数组(带有日期字段)转换为数组字典(按星期几键控)

mysql - 以原始形式将数据保存在数据库中,并在json中获取结果

mysql - 连接到 AWS Elastic Beanstalk 上的 Mysql

r - 消除字符向量中非唯一元素的歧义

java - 验证时间戳格式 yyyy-MM-dd'T'HH :mm:ssZ in java?

c# - .NET 的强大 DateTime 解析器库