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

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

时间:2023-04-23 11:13:09浏览次数:37  
标签:group distinct 语义 索引 MySQL 效率 进行

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

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

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

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

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

推荐group by的原因

  • group by语义更为清晰

  • group by可对数据进行更为复杂的一些处理

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

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

相关文章

  • mysql索引学习
    概念:是一种高效获取数据的数据结构(有序)索引结构二叉树红黑树hashbtree,叶子节点存数据,一个页占用数据大,层级结构就多b+tree,非叶子节点存储数据,mysql做了优化,双向链表索引分类:主键索引、唯一索引、常规索引、全文索引聚集索引、非聚集索引通过命令查询增删改查执行次数......
  • Mysql中如果建立了索引,索引所占的空间随着数据量增长而变大,这样无论写入还是查询,性能
    索引所占空间的增长确实会对MySQL数据库的写入性能和查询性能造成影响,这主要是由于索引数据过多时会导致磁盘I/O操作变得非常频繁,从而使性能下降。为此,可以采取以下几种方式来减缓这种影响: 1.限制索引的大小:可以考虑为索引指定大小限制,在存储时仅存储指定大小内的数据。例如,在......
  • mysql replace 正则替换
    先说结论:8.0版本之前不支持,只能采用曲线方法,例如:UPDATEtestsettest.data=REPLACE(test.data,SUBSTR(test.data,LOCATE("{",test.data),LOCATE("}",test.data)),"") 8.0之后使用REGEXP_REPLACE函数UPDATEtableNameset`name`=REGEXP_REPLACE(`name`,'......
  • mysql字段过长无法作为约束、索引的解决方案
    背景:对接过程中遇到一个场景 需要用(网页链接+请求id)作为唯一约束,由于url很长,我在一开始就设置为了text字段。ALTERTABLExxx.xxxADDCONSTRAINTxxxUNIQUEKEY(xxxx);在加约束时报错:SQL错误[1170][42000]:BLOB/TEXTcolumn'xxxx'usedinkeyspecificationwith......
  • mysql单表备份部分数据且数据量较大时
    --复制表结构CREATETABLEtableB(LIKEtableA);--插入筛选数据INSERTintotableBSELECT*fromtableAwhereXXX=?;--重命名,替换renametabletableAtotableC;renametabletableBtotableA;--删除旧表DROPTABLEtableC;......
  • MySQL数据类型之字符型
    字符类型类型说明N的含义是否有字符集最大长度char(n)定长字符字符是255varchar(n)变长字符字符是65535binary(n)定长二进制字节字节否255varbinary(n)变长二进制字节字节否65535tinyblob二进制大对象字节否255blob(n)二进制大对象字节否65535mediumblob(n)二进制大对象字节否16Mlo......
  • 【MySQL】InnoDB中的GAP锁详解
    测试数据:CREATETABLE`lock_test`(`a`int(11)NOTNULLAUTO_INCREMENT,`b`int(11)NOTNULL,`c`int(11)NOTNULL,`d`int(11)NOTNULL,PRIMARYKEY(`a`),UNIQUEKEY`idx_b`(`b`),KEY`idx_c`(`c`))ENGINE=InnoDBDEFAULTCHARSET=latin1;IN......
  • MySQL数据类型之日期型
    日期类型日期类型占用空间(字节数)表示范围date41000-01-01~9999-12-31datetime81000-01-0100:00:00.000000~9999-12-3123:59:59.999999timestamp41970-01-0100:00:00.000000UTC~2038-01-1903:14:07.000000UTCyear11901-2155time3-838:59:59.000000~838:59:59.000000date......
  • 【IT老齐002】MySQL集群模式与应用场景
    【IT老齐002】MySQL集群模式与应用场景单库模式优点简单粗暴适合数据量干万以下小型应用企业网站,创业公司首选缺点不具备可用性与并发性读写分离集群模式读写分离中间件insert、update、delete负载均衡到从库select路由到主库MySQL主从复制binlog......
  • Mysql解决Authentication plugin ‘caching_sha2_password‘ cannot be loaded
    1、登录Mysqlmysql-uroot-p2、修改账户密码加密规则并更新用户密码//修改加密规则ALTERUSER'root'@'localhost'IDENTIFIEDBY'password'PASSWORDEXPIRENEVER;//更新一下用户的密码ALTERUSER'root'@'localhost'IDENTIFIEDWITHmysql_native_pa......