MYSQL 引擎如何在查询中工作

How MYSQL Engine works in Query

我知道这个问题很简单,但我想有人解释一下,看看我是否做对了。

这个简单的查询 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 将首先尝试评估约束,它承诺以最低的成本最大程度地减少结果集,例如使用没有索引的列的约束可能最后被评估,因为评估是昂贵的。

其余部分留给其他排序的空间很小,但某些步骤可能会从适当的索引中获益。