首页 > 数据库 >MySQL 中的 distinct 和 group by 哪个效率更高?

MySQL 中的 distinct 和 group by 哪个效率更高?

时间:2023-04-12 13:35:22浏览次数:40  
标签:group distinct 语义 索引 MySQL 效率 进行

 
1、distinct用法

 语法:

SELECT DISTINCT columns FROM table_name WHERE where_conditions;

 举例:

     多列去重:distinct多列的去重,则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

     

 

2、group by用法

  语法:

SELECT columns FROM table_name WHERE where_conditions GROUP BY columns;

  举例: 

  多列去重:两者的语法区别在于,group by可以进行单列去重,group by的原理是先对结果进行分组排序,然后返回每组中的第一条数据。且是根据group by的后接字段进行去重的。

      

 3、distinct 和 group by  区别

  • 在语义相同,有索引的情况下:

    group by和distinct都能使用索引,效率相同。因为group by和distinct近乎等价,distinct可以被看做是特殊的group by

  • 在语义相同,无索引的情况下:

    distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by在Mysql8.0之前会进行隐式排序,导致触发filesort,sql执行效率低下。

    但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引的情况下,group by和distinct的执行效率也是近乎等价的。

   推荐group by的原因

  1. group by语义更为清晰
  2. group by可对数据进行更为复杂的一些处理

   相比于distinct来说,group by的语义明确。且由于distinct关键字会对所有字段生效,在进行复合业务处理时,group by的使用灵活性更高,group by能根据分组情况,对数据      进行更为复杂的处理,例如通过having对数据进行过滤,或通过

标签:group,distinct,语义,索引,MySQL,效率,进行
From: https://www.cnblogs.com/sxx-blogs/p/17309492.html

相关文章

  • mysql连接数查看
    12showvariableslike '%max_connection%';查看最大连接数set globalmax_connections=1000;       重新设置最大连接数1234567891011mysql>showstatuslike  'Threads%';+-------------------+-------+|Variable_name  ......
  • 使用MySql8.0+项目无法连接数据库问题
    MySql连接字符串:jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai注意这里的useSSL为true:表示使用安全连接经过查阅网络博客发现将useSSL修改为false可以正常连接具体原因之后更新......
  • mysql插入数据如果存在则忽略
    经常有一种场景,某类数据只能在一张表中存在一条,我们会创建唯一索引进行约束,但是如果重复插入就报错了,所以开发上一版都会先查一次然后再insert。mysql有个简单的写法,基于已经创建的索引,如果存在的话,那么就忽略这条记录的插入。不废话了,上代码吧。createtableuserabc(username......
  • 五、基于PVC+StatefulSet实现的MySQL主从架构
    案例(部署mysql)本节使用StatefulSet控制器部署一个MySQL集群,然后进行宕机测试,观察集群是否可以正常恢复使用并且不丢失数据。实现的集群有如下特征:是一个主从复制的MySQL集群1个主节点,多个从节点从节点能够水平扩展所有的写操作,只能在主节点上执行......
  • 力扣1113(MySQL)-报告的记录(简单)
    题目:动作表:Actions 此表没有主键,所以可能会有重复的行。action字段是ENUM类型的,包含:('view','like','reaction','comment','report','share')extra字段是可选的信息(可能为null),其中的信息例如有:1.报告理由(areasonforreport)2.反应类型(atypeo......
  • nodejs连接mysql数据库
      https://www.cnblogs.com/hechunfeng/p/17308654.html这个是安装数据库   1.我们先建一个表和插入一下字段,这些都是自己弄的    2.安装npminstallmysqlconst{createPool}=require('mysql');constpool=createPool({host:"localhost",......
  • 记一次kvm虚机mysql数据库磁盘扩容操作步骤及其问题小坑
    背景:业务量持续增加,原来规划的1T磁盘空间不足以支撑业务发展存储使用,需要对数据库磁盘进行扩容。目前物理机有新增了2块3.5Tssd的数据盘用于数据库虚机磁盘扩容使用。需要安排时间对其进行操作扩容。操作思路:1、完成磁盘raid1操作,将新磁盘挂载到物理机上并添加到kvm的存储空间......
  • 【MySQL】在CentOS 7.5平台通过YUM安装MySQL 5.7
    [root@node01~]#cat>>/etc/hosts<<EOF192.168.1.201node01EOF[root@node01~]#useraddmysql[root@node01~]#idmysqluid=500(mysql)gid=500(mysql)groups=500(mysql)[root@node01~]#cat>>/etc/security/limits.conf<<EOF......
  • MySQL查询结果条数编号示例 mysql 查找结果中自动加序号列
    SELECT@row:=@row+1asrow,t.idFROMsgcorp_productt,(SELECT@row:=0)rwheret.idnotin(selectproduct_idfromsgcorp_pic)http://database.51cto.com/art/201011/235142.htm......
  • 力扣1112(MySQL)-每位学生的最高成绩(中等)
    题目:表:Enrollments(student_id,course_id)是该表的主键。问题编写一个SQL查询,查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取course_id最小的一门。查询结果需按student_id增序进行排序。示例Enrollments表:Result表: 建表语句:1CreatetableIf......