索引使用的常量表达式仅计算一次。 这是什么意思 ?请举个例子
答案 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)
并进行比较。