標籤:使用 資料 工作 sp c 資料庫 不同的 rom bs
這兩者本質上應該沒有可比性,distinct 取出唯一列,group by 是分組,但有時候在最佳化的時候,在沒有彙總函式的時候,他們查出來的結果也一樣。
舉例來說可能方便一點。
A表
id num
a 1
b 2
c 3
a 4
c 7
d 3
e 5
如果只選出id列,用distinct和group by 一樣的。
select distinct(id) from A;
id
a
b
c
d
e;
select id from A group by id;
id
a
b
c
d
e;
不同之處可能在於group by有排序功能。
但是如果需要加上另一列num,結果不同。
group by 是分組語句,如果用
select id,num from A group by id,num;
這樣的結果在本例中與不加group by是一樣的,因為num各個不同。
但是如果
select id,num from A group by id;
注意該語句是錯誤語句,因為num沒有使用聚組函數,例如:sum(求和),avg(求平均數)
select id,sum(num) from A group by id;
id sum(num)
a 5
b 2
c 10
d 3
e 5
用distinct不顯示重複的行。
在本例中
select distinct id,num from A;的結果也和不加distinct一致。
因為id,num沒有重複的行,而不是只看id。
group by 功能更強大一些,另外推薦使用group by。
因為distinct會導致全表掃描,而group by如果索引建的
恰當的話,會有效能上的提高。
那DISTINCT 和GROUP BY哪個效率更高?
DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作還要為其他聚集合函式進行準備工作。從這一點上將,GROUP BY操作做的工作應該比DISTINCT所做的工作要多一些。
但實際上,GROUP BY 效率會更高點,為什麼呢?對於DISTINCT操作,它會讀取了所有記錄,而GROUP BY需要讀取的記錄數量與分組的組數量一樣多,也就是說比實際存在的記錄數目要少很多。
(轉)資料庫 distinct 和 group by 的區別