我知道这是一个简单的问题,但是我想请别人解释一下我是否正确。
这个简单的查询是否MYSQL总是从左到右执行语义?
SELECT c03,c04,c05,count(*) as c FROM table
where status='Active' and c04 is not null and c05 is not null
group by c03,c04,c05
having c>1 order by c desc limit 10;
引擎从左到右启动,通过
* Status later comparing c04 and later c05
* Later groups the results
* later filters again the result applying the c>1 filter
* Later sorts and fetch the first 10 results and disposing the others
或者有其他一些优化假设没有索引正在使用...
最佳答案
我猜Status later comparing c04 and later c05
取决于可用索引和列的cardinality,并且并不总是按该顺序求值。 MySQL将首先尝试评估约束条件,这有望以最低的成本最大程度地减少结果集,例如使用无索引的列的约束可能最后被评估,因为评估成本很高。
其余的几乎没有其他订单的余地,但是某些步骤可能会从适当的索引中受益。
关于mysql - MYSQL引擎在查询中的工作方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43209925/