-- 創建一個測試表
create table tp_content(
id int not null,
title char(32) not null,
addtime date not null default '2000-01-01'
) engine = myisam default charset = utf8;
-- 修改sql語句的結束符
delimiter $
-- 創建一個存儲過程,插入100萬條測試數據
CREATE PROCEDURE load_data()
begin
declare i int default 0;
while i < 1000000
do
insert into tp_content values (i,replace(uuid(), '-', ''),adddate('2000-01-01',(rand(i)*36520) mod 3652));
set i = i + 1;
end while;
end
$
call load_data();
-- 修改回原來的結束符
delimiter ;
1、沒有建立主鍵的對比
-- 運行distinct的sql語句
-- 運行group by的sql語句
2、建立主鍵的對比
-- 建立id主鍵
alter table tp_content add primary key(id);
distinct
group by
結論:
上面的例子可以看出:沒有建立主鍵時,distinct查詢的速度要比group by快一點(distinct的時間是30.934s,group by的時間是33.905s),而建立主鍵后group by和distinct的效率都提高了,但是兩者的速度依然差不多(distinct的時間是2.753s,group by的時間是2.762s)。
由於個人電腦的性能比較差,查出的時間比較久,所以這里的時間只是相對時間,假如用更好性能的電腦做實驗,時間會快,但是我想結論應該是差不多的。