Mysql文档WHERE子句优化:索引使用的常量表达式仅计算一次

时间:2018-05-25 03:33:17

标签: mysql

索引使用的常量表达式仅计算一次。 这是什么意思 ?请举个例子

1 个答案:

答案 0 :(得分:0)

优化程序可以解析为常量的任何表达式都被解析为常量,而不是针对每一行进行求值。

WHERE start_date >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

如果今天运行,该查询将完全等同于此...

WHERE start_date >= '2018-04-25'

......但不仅仅是逻辑等同。它将被执行相同,因为表达式DATE_SUB(CURDATE(), INTERVAL 1 MONTH)可以减少为常量,优化器在规划查询时执行此操作。

因此很容易找到start_date上的索引的行> ='2018-04-25'。

服务器将从每行中提取start_date,然后评估每行的DATE_SUB(CURDATE(), INTERVAL 1 MONTH)并进行比较。