distinct和group by的效率比较


-- 创建一个测试表

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)。

由于个人电脑的性能比较差,查出的时间比较久,所以这里的时间只是相对时间,假如用更好性能的电脑做实验,时间会快,但是我想结论应该是差不多的。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM