我有一张大约有200万条记录的表。它有一个列,其中包含日期值 String 格式(类似格式)。现在我需要根据这个字符串日期列过滤记录。我试过了 STR_TO_DATE 但是获取记录需要很长时间,因为此列没有 INDEX . 有人能帮我添加一个 Index 对吗?
String
STR_TO_DATE
INDEX
Index
gab6jxml1#
将函数中的列 Package 到 predicate 中会强制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)
这不一定是查询的最佳索引。这真的取决于查询。例如,覆盖索引可能是更合适的选择。这个问题提到将“date”值存储为字符串,大概意味着char或varchar数据类型。注意,mysql实现了一个本机 DATE 数据类型,它是为存储“日期”值而定制的。
DATE
1条答案
按热度按时间gab6jxml1#
将函数中的列 Package 到 predicate 中会强制mysql对每一行的函数求值,从而有效地禁用可能更高效的索引查找或范围扫描。
举个例子,mysql不能使用索引范围扫描
但是让sql引用成为一个空列将允许mysql考虑对适当的索引使用范围扫描操作。。。
在后一个查询的合适索引处的第一个剪切将是
这不一定是查询的最佳索引。这真的取决于查询。例如,覆盖索引可能是更合适的选择。
这个问题提到将“date”值存储为字符串,大概意味着char或varchar数据类型。注意,mysql实现了一个本机
DATE
数据类型,它是为存储“日期”值而定制的。