distinct原理?
distinct原理是:DISTINCT 實際上和 GROUP BY 操作的實現非常相似,只不過是在 GROUP BY 之后的每組中只取出一條記錄而已。所以,DISTINCT 的實現和 GROUP BY 的實現也基本差不多,沒有太大的區別。
同樣可以通過松散索引掃描或者是緊湊索引掃描來實現,當然,在無法僅僅使用索引即能完成 DISTINCT 的時候,MySQL 只能通過臨時表來完成。但是,和 GROUP BY 有一點差別的是,DISTINCT 并不需要進行排序。也就是說,在僅僅只是 DISTINCT 操作的 Query 如果無法僅僅利用索引完成操作的時候,MySQL。
會利用臨時表來做一次數據的“緩存”,但是不會對臨時表中的數據進行 filesort 操作。當然,如果我們在進行 DISTINCT 的時候還使用了 GROUP BY 并進行了分組,并使用了類似于 MAX 之類的聚合函數操作,就無法避免 filesort 了。