在JOIN子句中MySQL逻辑评估是懒惰/短路吗?

bgc*_*ode 8 mysql logic boolean-logic lazy-evaluation

采用以下表达式: FALSE AND (expression)

MySQL会评估表达式,还是只要看到它就继续前进FALSE

一些背景上下文 - 我想通过以下方式加快查询:

JOIN... ON (indexed_column1=indexed_column2 AND non_indexed_column_a=non_indexed_column_b)

有关我为什么要执行此查询的背景,请参阅此答案

如果它总是要评估non_indexed_column_a=non_indexed_column_b那么就没有时间了.

Ome*_*esh 3

MySQL 查询优化器尽可能使用索引,并使用限制性最强的索引,以便消除尽可能多的行。

因此,在您的查询中,它将始终根据第一个索引列过滤记录,然后从非索引列过滤记录。

同样在查询执行之前,MySQL 会消除总是错误的代码(死代码)。

有关更多详细信息,请参阅:http://www.informit.com/articles/article.aspx ?p=377652&seqNum=2