mysql+distinct+max_MySQL 中 distinct 和 group by 性能比较-Fun言
看了网上的一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论
仅在个人计算机上测试,可能不全面,仅供参考
测试过程
准备一张测试表
CREATE TABLE `test_test` (
`id` int(11) NOT NULL auto_increment,
`num` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
建个储存过程向表中插入10W条数据
create procedure p_test(pa int(11))
begin
declare max_num int(11) default 100000;
declare i int default 0;
declare rand_num int;
select count(id) into max_num from test_test;
while i < pa
do
if max_num < 100000 then
select cast(rand()*100 as unsigned) into rand_num;
insert into test_test(num)values(rand_num);
end if;
set i = i +1;
end while;
end
调用存储过程插入数据
1 call p_test(100000);
开始测试:(不加索引)
select distinct num from test_test;
select num from test_test group by num;
[SQL] select distinct num from test_test;
受影响的行: 0
时间: 0.078ms
[SQL]
select num from test_test group by num;
受影响的行: 0
时间: 0.031ms
二、num字段上创建索引
ALTER TABLE `test_test` ADD INDEX `num_index` (`num`) ;
再次查询
select distinct num from test_test;
select num from test_test group by num;
[SQL] select distinct num from test_test;
受影响的行: 0
时间: 0.000ms
[SQL]
select num from test_test group by num;
受影响的行: 0
时间: 0.000ms
这时候我们发现时间太小了 0.000秒都无法精确了。
我们转到命令行下 测试
mysql> set profiling=1;
mysql> select distinct(num) from test_test;
mysql> select num from test_test group by num;
mysql> show profiles;
+----------+------------+----------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+----------------------------------------+
| 1 | 0.00072550 | select distinct(num) from test_test |
| 2 | 0.00071650 | select num from test_test group by num |
+----------+------------+----------------------------------------+
测试结论
加了索引之后 distinct 比没加索引的 distinct 快了 107倍。
加了索引之后 group by 比没加索引的 group by 快了 43倍。
再来对比 :distinct 和 group by
不管是加不加索引 group by 都比 distinct 快。
因此使用的时候建议选 group by
参考推荐:
mysql+distinct+max_MySQL 中 distinct 和 group by 性能比较-Fun言相关推荐
- mysql+distinct+max_MySQL中distinct与group by之间的性能进行比较
最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...
- MySQL中distinct和group by性能比较
MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...
- distinct mysql性能_MySQL中distinct与group by之间的性能进行比较
最近在网上看到了一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论,测试过程在个人计算机上,可能不够全面,仅供参考. 测试过程: 准备一张测试表 CREATE TABLE `test_test` ...
- distinct mysql性能_MySQL中distinct和group by性能比较
MySQL中distinct和group by性能比较[转] 之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番.得出了结论(仅在个人计算机上测试,可能不全面,仅供参考) 测试过程: 准备一张 ...
- mysql的group语句_MySQL中distinct与group by语句的一些比较及用法讲解
这篇文章主要介绍了MySQL中distinct与group by的一些比较及用法讲解,二者在查询操作中的用法有很多相似之处,需要的朋友可以参考下 在数据表中记录了用户验证时使用的书目,现在想取出所有书 ...
- mysql 重复数据 distinct_MySQL中distinct语句去查询重复记录及相关的性能讨论
在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...
- mysql去重查询group_MySQL distinct 与 group by 去重(where/having)
MySQL中常用去重复数据的方法是使用 distinct 或者 group by ,以上2种均能实现,但2者也有不同的地方. distinct 特点: 如:select distinct name, ...
- mysql中distinct走索引吗_MySQL中索引优化distinct语句及distinct的多字段操作
MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用 ...
- mysql去重复查询 性能_MySQL中distinct语句去查询重复记录及相关的性能讨论_MySQL...
在 MySQL 查询中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值. 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦.用法也很简单: SELE ...
最新文章
- linux nand 坏块_linux内核中对nand的坏块管理
- PHP魔术方法__tostring()篇
- 中国语言文学专业c刊排行榜,中国有名的文学刊物有哪些 十大中国著名文学刊物盘点...
- json数据格式了解
- 电工结业试卷_电工技术基础结业考试试卷
- python paramiko远程执行命令打开窗口_使用Paramiko在远程机器上通过sshClient()执行本地python脚本...
- python 数学期望_(Python)零起步数学+神经网络入门
- WebRequest中的工厂方法模式
- 学会拒绝别人的6个技巧_4个秘诀教你怎么拒绝别人,还能不伤和气
- 趣学算法 陈小玉 书中所有问题的实现代码
- 北理c语言乐学作业分数运算,北理乐学C语言答案-最新(12页)-原创力文档
- 计算机网络波特率公式,传输速率——比特率和波特率
- 计算机一级如何添加对角线,word中如何在单元格中添加对角线
- ps保存psd后图层全没了_Photoshop文件不显示图层
- 学习笔记---ih5_九宫格_拼图
- c#上位机plc通讯读位
- 深度学习Ubuntu20.04+CUDA+Pytorch环境配置+无显示器远程控制(1)
- Qt笔记(五十七)之显示图片缩略图
- 2018,这些重大科技值得期待
- uniapp聊天框滚动到底部(简单高效)
热门文章
- 新概念1 课文和单词(2022/12/24)
- Matlab神经网络语音增强,基于BP神经网络的语音增强研究
- 小学计算机课程目录五年级,小学五年级信息技术课件
- CodeForces - 1325C Ehab and Path-etic MEXs
- opencv学习笔记(三)—— 利用图像金字塔进行图像无缝拼接,cv2.pyrDown() ,cv2.pyrUp()
- USTCOJ1240 黑屋 位运算
- 5G网络学习(四)——5G网络中数据包转发模型(未完待续)
- kaggle数据集、mnist数据集、imdb数据集分享
- Java程序设计——事务管理(JDBC编程)
- Windows10超详细esmini的源码安装与测试运行——OpenScenario播放器