当查询条件为mysql中的now()函数时,无法使用索引的varchar列

当查询条件为mysql中的now()函数时,无法使用索引的varchar列,mysql,Mysql,背景: 在我的例子中,mysql是5.7 有一个名为a的表和一个名为date_str的索引列。date_str中的数据看起来像2017-01-16 00:00:00 问题: 我发现该索引不能用于范围查询,例如现在从where date_str>选择*from。 但当查询条件是另一个函数时,将使用索引 有人知道为什么吗?谢谢。根据您的查询计划,如果需要,将使用您的索引 在应用任何索引之前,DatabaseQueryAnalyzer会分析查询并估计不同操作的成本 如果查询分析器发现应用索引将提高查

背景:

在我的例子中,mysql是5.7

有一个名为a的表和一个名为date_str的索引列。date_str中的数据看起来像2017-01-16 00:00:00

问题:

我发现该索引不能用于范围查询,例如现在从where date_str>选择*from。

但当查询条件是另一个函数时,将使用索引


有人知道为什么吗?谢谢。

根据您的查询计划,如果需要,将使用您的索引

在应用任何索引之前,DatabaseQueryAnalyzer会分析查询并估计不同操作的成本

如果查询分析器发现应用索引将提高查询性能,那么只有它才会使用索引


这些统计信息通过增加/减少/更新表中的数据进行更改。

将日期存储在日期、日期时间或时间戳字段中,而不是作为字符串。您可以共享查询计划吗?如果列date_str的记录较少或重复值较多,则不能使用索引。我已添加了普通查询。谢谢@AnilAgrawal@Shadow这是有历史原因的。