MySQL - AND条件

Ale*_*lex 7 mysql

假设我有这样的查询:

SELECT bla WHERE foo LIKE '%bar%' AND boo = 'bar' AND whatvr IN ('foo', 'bar')...
Run Code Online (Sandbox Code Playgroud)

我想知道MySQL在检索结果时是否继续检查所有条件.例如.如果foo不是LIKE %bar%,它会继续检查是否boo = 'bar',等等?

如果我把最不可能的条件放在最后,那会更快吗?

我很抱歉,如果这似乎是一个愚蠢的问题,我谈到SQL时我是一个完整的菜鸟:)

Luk*_*keH 4

我认为不能保证多个条件是否会短路,但是......

一般来说,您应该将查询优化器视为黑匣子,并假设(除非您有相反的证据)它将正确完成其工作。优化器的工作是确保尽可能高效地检索所请求的数据。如果最有效的计划涉及短路,那么它就会做到;如果没有,那就不会。

(当然,查询优化器并不完美。如果您有证据表明查询没有以最佳方式执行,那么通常值得重新排序和/或重新声明查询以查看是否有任何变化。)

  • 根据 SQL 规范,此行为取决于实现:http://stackoverflow.com/questions/789231/is-the-sql-where-clause-short-circle-evaluated/909770#909770 (2认同)