distinct的作用

在mysql中,distinct关键字的主要作用就是对数据库表中一个或者多个字段重复的数据进行过滤,只返回其中的一条数据给用户,distinct只可以在select中使用

distinct的原理

distinct进行去重的主要原理是通过先对要进行去重的数据进行分组操作,然后从分组后的每组数据中去一条返回给客户端,在这个分组的过程可能会出现两种不同的情况:

  • distinct 依赖的字段全部包含索引:
    该情况mysql直接通过操作索引对满足条件的数据进行分组,然后从分组后的每组数据中去一条数据。

  • distinct 依赖的字段未全部包含索引:
    该情况由于索引不能满足整个去重分组的过程,所以需要用到临时表,mysql首先需要将满足条件的数据放到临时表中,然后在临时表中对该部分数据进行分组,然后从临时表中每个分组的数据中去一条数据,在临时表中进行分组的过程中不会对数据进行排序。

distinct的用法

distinct的使用语法是这样的:

select distinct expression[,expression...] from tables [where conditions];

在使用distinct的过程中主要注意一下几点:

  • 在对字段进行去重的时候,要保证distinct在所有字段的最前面
  • 如果distinct关键字后面有多个字段时,则会对多个字段进行组合去重,只有多个字段组合起来的值是相等的才会被去重

下面我们通过在开发过程中经常遇到的一些关于distinct的实例来加深大家对该关键字用法的理解:

数据库表结构和数据如下图所示:

  • 对单个字段进行去重sql:
select distinct  age from user;查询结果
age
10
20
30
  • 对多个字段进行去重sql:
select distinct name,age from user;查询结果
name    age
One 10
Zero    20
Two 20
Four    30
One 30
  • 对多个字段进行去重并求count的sql:
select count(distinct name,age) as total from user;查询结果
total
5
  • 对select * 进行去重
select distinct * from user;由于 * 代表所有字段,所以该sql和 select distinct id,name,age,sign from user 语义相同查询结果:
id      name    age     sign
1       One     10      梦想要有的,万一实现了呢
2       Zero    20      http://www.chaoshizhushou.com
3       Two     20      OneZeroTwoFour
4       Four    30      加油
5       One     30      学习才是硬道理
6       Four    30      一日三省吾身

mysql中的distinct的用法相关推荐

  1. MySQL中sum和count用法总结

    MySQL中sum和count用法总结 1.sum 2.count 例子:要求:查询出2门及2门以上不及格者的平均成绩. 3.MySQL 分组之后如何统计记录条数 gourp by 之后的 count ...

  2. MySQL中ESCAPE关键字的用法详解

    MySQL中ESCAPE关键字的用法详解 MySQL中ESCAPE关键字的用法详解 1. mysql转义概述 2. escape验证 MySQL中ESCAPE关键字的用法详解 1. mysql转义概述 ...

  3. mysql distinct 优化_Mysql应用分析MySQL中优化distinct的技巧

    <MysqL应用分析MysqL中优化distinct的技巧>要点: 本文介绍了MysqL应用分析MysqL中优化distinct的技巧,希望对您有用.如果有疑问,可以联系我们. sql用于 ...

  4. mysql 中set函数的用法

    mysql 中set函数的用法 :当值为空时不进行赋值 update user_user <set><if test="nickname!=null and nicknam ...

  5. mysql distinct 慢_分析MySQL中优化distinct的技巧

    有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user ...

  6. Mysql中where和having用法及区别

    1.Mysql中Having和Where用法 当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句.如果是在聚合函数前过滤记录用Where,在聚合 ...

  7. mysql中去重 distinct 用法

    在使用mysql时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count( ...

  8. mysql查询distinct_mysql中select distinct的用法

    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但 往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的 ...

  9. 面试官:MySQL中的distinct和group by哪个效率更高?

    结论 先说大致的结论(完整结论在文末): 在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同. 在语义相同,无索引的情况下:distinct效率高于group by. ...

最新文章

  1. LigerUI 使用教程表格篇
  2. Jquery的深度拷贝和深度克隆
  3. 六周第四次课(1月18日)
  4. 2014公积金新政策对你买房有什么好处?
  5. 【前端基础进阶】JS-Object 功能详解
  6. 哈工大大数据实验_【新闻动态】南京大学PASA大数据实验室在KDD Cup 2020 AutoGraph自动化图数据建模国际挑战赛中荣获第二名...
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的社区养老服务网站
  8. k8s 离线安装_使用 Kind 在离线环境创建 K8S 集群
  9. linux下高可用性群集和负载均衡群集的实现
  10. pmp学习资料下载-pmp备考
  11. 编译原理-第一节(东南大学廖力老师)
  12. 模拟退火算法求解最优化问题
  13. linux系统运行3dmax,Linux下3D桌面的效果的实现
  14. petalinux2020.2离线编译配置
  15. OpenG绘图方式比较
  16. vuex中subscribe的使用
  17. 七十三、java版商城之买家端商品详情Spring Cloud+SpringBoot+mybatis+uniapp b2b2c o2o 多商家入驻商城 直播带货商城 电子商务
  18. 脱胎于沃尔沃的Polestar 2浮出水面,它真能挑战Model 3吗?
  19. 微信支付rootca.pem通用根证书文件,亲测可用
  20. 联想智能云:“三级火箭”战略加持下的云时代整合服务商

热门文章

  1. cacti监控windows服务器
  2. 英语口语255之每日十句口语
  3. To B 和To C 产品经理,哪个对能力要求更高?
  4. GPT之父谈未来五年的AI:模型规模见顶,下个突破点在用好AI涌现特质
  5. 百万奖池 十大方向 | 第六期论文复现挑战赛如约而至!
  6. 一个微信群机器人PHP,企业微信群机器人301019
  7. Redis系列(五)Redis持久化机制
  8. 地震 位错模型 matlab,D-InSAR技术在地震同震形变研究中的应用
  9. 4gl中如何调用存储过程
  10. c语言自定义函数名称怎么命名,C语言函数名称为什么可以任意更改?