假设我有这样的查询:
SELECT bla WHERE foo LIKE '%bar%' AND boo = 'bar' AND whatvr IN ('foo', 'bar')...
我想知道 MySQL 在检索结果时是否会继续检查所有条件。
例如。如果 foo
不是 LIKE %bar%
,它会继续检查 boo = 'bar'
等吗?
如果我把不太可能为真的条件放在最后,会不会更快一些?
如果这看起来是个愚蠢的问题,我很抱歉,在 SQL 方面我是一个完全的菜鸟 :)
最佳答案
我不认为有任何关于多个条件是否会短路的保证,但是......
一般来说,您应该将查询优化器视为一个黑盒子,并假设——除非您有相反的证据——它会正确地完成它的工作。优化器的工作是确保尽可能高效地检索请求的数据。如果最有效的计划涉及短路,那么它就会这样做;如果没有,则不会。
(当然,查询优化器并不完美。如果您有证据表明查询没有以最佳方式执行,那么通常值得重新排序和/或重新声明查询以查看是否有任何变化。)
关于MySQL - AND 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449105/