2013年4月16日 星期二

[SQL]GROUP BY 與 DISTINCT 的差異

  簡單說 GROUP BY 是在做群集;而 DISTINCT 則是用來排除重複的資料;其使用的方式並不相同。


  由於在 GROUP BY 中使用到群組函數,所以會覺得跟 DISTINCT 的結果一模一樣,但如果用工具記錄下兩者所花費的執行時間,你會發現單純選取不重複的資料行時,使用 GROUP BY 會比 DISTINCT 花更多的時間,尤其在你的資料表龐大或需要多個資料表的關聯時,感覺會特別明顯。

  這是因為在 SQL 中,使用 DISTINCT 是直接將資料行選取出來後,直接排除掉重複的資料行即為結果,所需要的 CPU 計算時間比較少;而使用 GROUP BY 則選出資料集後先將資料集進行排序、分組等動作,最後再在每個組別中抽出任一資料行做為結果,CPU 需要花費比較多的計算時間來處理這一連串的過程。

  為了養成良好的習慣,建議你根據目的的不同來撰寫 SQL 指令,如果只是要選出不重複的資料行,還是儘量使用 DISTINCT 會比較好!



GROUP BY
DISTINCT
GROUP BYSELECT `column` FROM `table` GROUP BY `column`
可用於將重複的資料分組進行動作。
DISTINCTSELECT DISTINCT `column` FROM `table`
可去除重複的資料。

沒有留言:

張貼留言