假设我有两个条件的MySQL查询:
SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%';
第一个条件显然要比第二个条件便宜很多,所以我想确保它首先运行,限制将与LIKE子句进行比较的行池。 MySQL查询条件是按照它们列出的顺序运行的,如果没有,是否有指定顺序的方法?
答案 0 :(得分:7)
MySQL有一个内部查询优化器,可以在大多数情况下处理这些事情。所以,通常情况下,您不必担心它。
但是,当然,查询优化器并非万无一失。所以......
很抱歉这样做,但如果您怀疑某个查询的运行效率低于应有效率,那么您需要熟悉EXPLAIN
。
答案 1 :(得分:7)
优化器将按其认为合适的顺序评估WHERE条件。
SQL为declarative:您告诉优化人您想要什么,而不是 。
用procedural/imperative语言(.net,Java,php等)然后你说如何并选择首先评估哪个条件。
注意:“从左到右”确实适用于(a+b)*c
之类的某些表达,如您所期望的那样
答案 2 :(得分:1)
如果您对MySQL的索引使用有疑问,可以建议应该使用哪个索引。