在很多情况下,Distinct和order by的组合需要建立一个内存临时表。
因为distinct关键字可能利用group by,所以了解下mysql如何处理group by有帮助。
distinct通过会被当成一个特殊的group by,e.g.:
SELECT DISTINCT c1, c2, c3 FROM t1
WHERE c1 > const;
SELECT c1, c2, c3 FROM t1
WHERE c1 > const GROUP BY c1, c2, c3;
两条语句是等价的;
当distinct和limit row_count关键字组合使用时,mysql找出row_count行数据后会立刻停止。
如果并没有使用到什么的列,mysql在找到第一个匹配后会停止scan没有使用到的表:
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;