【发布时间】:2012-05-31 14:25:48
【问题描述】:
取如下表达式:FALSE AND (expression)
一旦看到FALSE,MySQL 会评估表达式还是继续前进?
一些背景背景——我想通过以下方式加快查询速度:
JOIN... ON (indexed_column1=indexed_column2 AND non_indexed_column_a=non_indexed_column_b)
关于我为什么要进行此查询的背景see this answer
如果它总是评估non_indexed_column_a=non_indexed_column_b,那么不会节省时间。
【问题讨论】:
-
我认为查询优化器会完全消除这种微不足道的情况。但是,在无法静态消除的情况下,诸如 SQL Server(已授予,而非 MySQL)等引擎不保证评估顺序;因为这实际上可以帮助他们更有效地使用索引等。知道 MySQL 特定的实现是如何工作的会很有趣,+1。
-
嗯,我太喜欢第一个链接问题中的答案了。毕竟投票结束。 (尽管编辑后的“JOIN”而不是“WHERE”可能略有不同。)
-
@Omesh:你应该发帖作为答案。
标签: mysql logic lazy-evaluation boolean-logic