我知道这是一个简单的问题,但是我想请别人解释一下我是否正确。

这个简单的查询是否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/

10-09 04:26