假设我有这样的查询:
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时我是一个完整的菜鸟:)
我认为不能保证多个条件是否会短路,但是......
一般来说,您应该将查询优化器视为黑匣子,并假设(除非您有相反的证据)它将正确完成其工作。优化器的工作是确保尽可能高效地检索所请求的数据。如果最有效的计划涉及短路,那么它就会做到;如果没有,那就不会。
(当然,查询优化器并不完美。如果您有证据表明查询没有以最佳方式执行,那么通常值得重新排序和/或重新声明查询以查看是否有任何变化。)
归档时间: |
|
查看次数: |
9299 次 |
最近记录: |