MySQL中distinct和count(*)的使用方法比较


Posted in MySQL onMay 26, 2021

首先对于MySQL的DISTINCT的关键字的一些用法:

1.在count 不重复的记录的时候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是计算talbebname表中id不同的记录有多少条。

2,在需要返回记录不同的id的具体值的时候可以用,比如SELECT DISTINCT id FROM tablename;返回talbebname表中不同的id的具体的值。

3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义,比如SELECT DISTINCT id, type FROM tablename;实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样。

4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的。

5.其实还有另外一种解决方式,就是使用,SELECT id, type, count(DISTINCT id) FROM tablename,虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据),返回的结果是只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了。
DISTINCT的效率:

SELECT id, type, count(DISTINCT id) FROM  tablename;虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据),SELECT id, type from tablename group by id;这样貌似也可以,用distinct的时候,如果它有索引,mysql会把它转成group by的方式执行。

 MySQL数据库对于COUNT(*)的不同处理会造成不同的结果,比如,

  执行:SELECT COUNT(*) FROM tablename;即使对于千万级别的数据mysql也能非常迅速的返回结果。 
  执行: SELECT COUNT(*) FROM tablename WHERE…..;mysql的查询时间开始攀升。 

网上查资料得知:当没有WHERE语句对于整个mysql的表进行count运算的时候,MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索,从而得出count的数值,因此加上where条件的查询速度就会很慢了。
以上关于MySQL数据库的distinct以及count(*)的使用就介绍到这里了,希望本次的介绍能够带给您一些收获。

MySQL 相关文章推荐
mysql优化
Apr 06 MySQL
详解MySQL主从复制及读写分离
May 07 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
Mysql数据库索引面试题(程序员基础技能)
May 31 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
探究Mysql模糊查询是否区分大小写
Jun 11 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
讲解MySQL增删改操作
May 06 MySQL
MySQL事务的隔离级别详情
Jul 15 MySQL
MySQL中出现乱码问题的终极解决宝典
如何设计高效合理的MySQL查询语句
May 26 #MySQL
虚拟机linux端mysql数据库无法远程访问的解决办法
May 26 #MySQL
正确使用MySQL INSERT INTO语句
May 26 #MySQL
正确使用MySQL update语句
May 26 #MySQL
详解MySQL集群搭建
MySQL中VARCHAR与CHAR格式数据的区别
May 26 #MySQL
You might like
PHP新手上路(十)
2006/10/09 PHP
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
微信支付开发维权通知实例
2016/07/12 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
2014/09/28 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
three.js快速入门【推荐】
2017/01/21 Javascript
完美实现js拖拽效果 return false用法详解
2017/07/28 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
Python  连接字符串(join %)
2008/09/06 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
利用Python开发实现简单的记事本
2016/11/15 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
pygame编写音乐播放器的实现代码示例
2019/11/19 Python
python从zip中删除指定后缀文件(推荐)
2019/12/05 Python
Shell编程面试题
2012/05/30 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
传播学专业毕业生自荐信
2013/11/04 职场文书
有针对性的求职自荐信
2013/11/14 职场文书
小学生安全责任书
2014/07/25 职场文书
试用期辞职信范文
2015/03/02 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
Python 装饰器(decorator)常用的创建方式及解析
2022/04/24 Python
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL
Python开发简易五子棋小游戏
2022/05/02 Python