首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL性能明智,Distinct和group by哪个更好

SQL性能明智,Distinct和group by都是用于数据查询和分组的关键字,但在性能方面有一些差异。

Distinct关键字用于去除查询结果中的重复行,它会对查询结果进行排序和去重操作。在执行Distinct操作时,数据库会对查询结果进行排序,然后逐行比较,去除重复行。这个过程可能会消耗较多的计算资源和时间,特别是当查询结果集较大时。

Group by关键字用于将查询结果按照指定的列进行分组,并对每个分组进行聚合操作。在执行Group by操作时,数据库会根据指定的列对结果集进行分组,并对每个分组进行聚合计算。相比于Distinct,Group by的性能更高,因为它只需要对结果集进行一次扫描和聚合操作,而不需要进行排序和逐行比较。

综上所述,从性能角度考虑,Group by比Distinct更好。如果只是需要去除重复行,而不需要进行分组和聚合操作,可以考虑使用Distinct。但如果需要进行分组和聚合操作,建议使用Group by。

以下是腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库 MySQL:提供高性能、可扩展的MySQL数据库服务,支持分布式部署和自动备份。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云数据库 TencentDB for MariaDB:基于MariaDB的高性能、可扩展的关系型数据库服务,支持分布式部署和自动备份。详情请参考:https://cloud.tencent.com/product/tcdb_mariadb
  • 腾讯云数据仓库 ClickHouse:高性能、可扩展的列式存储数据库,适用于大数据分析和实时查询。详情请参考:https://cloud.tencent.com/product/ch
  • 腾讯云云原生数据库 TDSQL-C:基于TiDB的云原生分布式关系型数据库,具备高可用、强一致性和水平扩展能力。详情请参考:https://cloud.tencent.com/product/tdsqlc
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

不要被长SQL吓到,深刻理解SQL执行顺序

不要被长SQL吓到,深刻理解SQL执行顺序 软件测试工程师,基础技能之一就是数据库,不管是基础的功能测试还是自动化测试、性能测试,都需要应用到数据库知识,并且要对数据库的学习不断深入,多学习一些高级的用法原理...当我们需要写一个比较长的SQL语句时,常常分不清哪个关键字在前哪个在后,这是因为SQL 语句的执行顺序跟它语法顺序并不一致,导致我们的书写顺序实际执行有偏差。 示例表 ?...执行如下SQL语句: select Sclass,count(Ssex) as count from student where Sage>18 group by Sclass...BY 6 HAVING 7 SELECT 8 DISTINCT 9 ORDER...having:对上面已经分组的数据进行过滤的条件 select:查看结果集中的哪个列,或列的计算结果 order by :对查询结果进行排序 limit:取出指定行的数据,返给用户 上述SQL示例语句执行顺序拆解如下

80320

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

DISTINCT方法实际上是在用uniqExact,也就是最耗时的精确去重函数,在这个场景下,我们假设用户数据量比较多,请求数据量也比较多,我们更关注哪个页面问题多,问题大,而不是有精确的多少个慢请求数...修改uniq外,还增加了如果增加了IF判断应该怎么写的语法 第二个问题是:With用法的性能问题    在Clickhouse,说起来,With有两种用法, 一种是通用SQL常见的用法 :with alias...就是建立一个虚拟表,来存储中间数据,然后进行使用,值得一提的是,子查询CTE嵌套的性能理论上是一样的,但后者的可读性更好,不过在某些关系型数据库的引擎上略有区别,但本质上区别不大 比如上一章节根据业务输出的带...看起来group by分组前后的数据做数值计算也是一个经典场景 那这里就得用到Clickhouse经典的窗口函数物化视图了 窗口函数这篇文章有比较详细的介绍 物化试图这篇文章有比较详细的介绍 先看结果...BY RegionID) 当然在这里用到的是uniqState uniqMerge 这里可以换成任何以-State-Merge为后缀的方法 回到这个SQL,这里uniqMerge(uniqState

26640

20年IT老兵的参赛感悟:永远不要停止前进的步伐!

在此我想这次结识的小伙伴们一起,感谢腾讯,希望腾讯云数据库发展的越来越好,希望每个人永远不要停止前进的步伐! 前段时间比较忙,今天我把比赛思路整理了一下,希望大家一起继续交流,共同提高。...第4条语句大家可有更好的思路?可以后台留言或者添加我的QQ3375887316交流。...; 第一条语句一样有个隐含排序的group by,考虑用(custkey,orderdate)复合索引; 如果将select中的totalprice字段,也加到索引中,可以实现using index不用回表...nationkey);alter table nation add index(name); n表index(name)长度102,还多了一个c表的index(nationkey),现在只有表结构,没有数据,具体是哪个方法更好...DB诊断日教学实例有奖征集 为更好的帮助DBA运维数据库,腾讯云将在每月6日开展DB诊断日,腾讯云高级产品经理迪B哥直播解析经典数据库运维难题,结合腾讯云数据库智能管家DBbrain的能力,为大家提供问题优化思路方法

82540

Clickhouse学习系列——一条SQL完成gourp by分组与不分组数值计算

DISTINCT方法实际上是在用uniqExact,也就是最耗时的精确去重函数,在这个场景下,我们假设用户数据量比较多,请求数据量也比较多,我们更关注哪个页面问题多,问题大,而不是有精确的多少个慢请求数...修改uniq外,还增加了如果增加了IF判断应该怎么写的语法第二个问题是:With用法的性能问题 在Clickhouse,说起来,With有两种用法,一种是通用SQL常见的用法 :with alias...就是建立一个虚拟表,来存储中间数据,然后进行使用,值得一提的是,子查询CTE嵌套的性能理论上是一样的,但后者的可读性更好,不过在某些关系型数据库的引擎上略有区别,但本质上区别不大比如上一章节根据业务输出的带...看起来group by分组前后的数据做数值计算也是一个经典场景那这里就得用到Clickhouse经典的窗口函数物化视图了窗口函数这篇文章有比较详细的介绍物化试图这篇文章有比较详细的介绍先看结果SQL/...BY RegionID)当然在这里用到的是uniqState uniqMerge这里可以换成任何以-State-Merge为后缀的方法回到这个SQL,这里uniqMerge(uniqState(

94892

Studio 3T中的新功能:支持SQL SELECT DISTINCT,WHERE子句中的JSON对象及更多

子句中的扩展SQL语法 能够在更改字段类型时保留值 更好的入门功能建立在功能新的交互之上 SQL查询|支持SQL SELECT DISTINCT 我们已将SQL SELECT DISTINCT添加到支持的...并将DISTINCT与JOIN,SELECT,GROUP BY,HAVINGORDER BY语句相结合。 在SQL查询文档中阅读有关SELECT DISTINCT及其技术限制的更多信息。...SQL查询| WHERE子句中的JSON对象 除了SELECT DISTINCT之外,您现在还可以通过两种方式在SQL WHERE子句中使用JSON对象: WHERE JSONor WHERE identifier...功能新的交互 我们还添加了功能新增的图库,以便为新用户当前用户提供更好的入职体验。在应用程序中检查它!...其他修复改进 视觉解释|性能改进 导入导出向导|化妆品性能修复 架构资源管理器|文档优化 查看我们的更改日志中的完整详细列表。

3.4K20

神奇的 SQL性能优化 → 让 SQL 飞起来

IN 来改善查询性能,而非 EXISTS,不是说连接更好,而是 EXISTS 很难掌握     回到问题:查询有充值记录的顾客信息,如果用连接来实现,SQL 改如何写?...这种写法能充分利用索引;而且,因为没有了子查询,所以数据库也不会生成中间表;所以,查询效率是不错的     至于 JOIN 与 EXISTS 相比哪个性能更好,不太好说;如果没有索引,可能 EXISTS...从结果上来看,两条 SQL 一样;但是从性能上来看,第二条语句写法效率更高,原因有两个 减少排序的数据量       GROUP BY 子句聚合时会进行排序,如果事先通过 WHERE 子句筛选出一部分行...之 HAVING → 容易被轻视的主角   在 GROUP BY 子句 ORDER BY 子句中使用索引     一般来说,GROUP BY 子句 ORDER BY 子句都会进行排序     如果...GROUP BY ORDER BY 的列有索引,那么可以提高查询效率     特别是在一些数据库中,如果列上建立的是唯一索引,那么排序过程本身都会被省略掉 使用索引   使用索引是最常用的 SQL

91920

Presto 在有赞的实践之路

一、Presto 介绍 Presto 是由 Facebook 开发的开源大数据分布式高性能 SQL 查询引擎。...但是那时候用户经常会抱怨 Presto 执行性能不稳定,对于同样的 SQL,时快时慢。...我们观察到同样的 Task,处理的数据量花费的CPU Time 类似,但是有时候就会出现某些特别长的Elapsed Time的Task,从而拖慢整体的查询性能。...不过这类业务通常数据量不是非常大,而且通常都是大宽表,也就不需要再去 Join 别的数据,Group By 形成的 Group 基数产生的聚合数据量不是特别大,查询时间主要消耗在数据扫描读取时间上。...此外,我们会为这种业务提供深度的性能测试,调整相应的配置,比如将 Task Concurrency 改成1,在并发量高的测试场景中,反而由于减少了线程间切换,性能更好

86720

数据分析工具篇——HQL原理及优化

从上面的两个逻辑图可以看到,第二种写法性能要好。union写法每两份数据都要先合并去重一次,再另一份数据合并去重,会产生较多次的reduce。第二种写法直接将所有数据合并再一次性去重。...COUNT(DISTINCT c4) FROM t2 GROUP BY c1,c2,c3 ) t3 GROUP BY c1,c2,c3; 修改为:(采用临时表消灭 COUNT(DISTINCT)作业不但能解决倾斜问题...如下的sql会存在性能问题: SELECT COUNT( DISTINCT id ) FROM TABLE_NAME WHERE ...; 主要原因是COUNT这种“全聚合(full aggregates...为了避免这一结构,我们采用嵌套的方式优化sql: SELECT COUNT(*) FROM ( SELECT DISTINCT id FROM TABLE_NAME WHERE … ) t; 这一结构会将任务切分成两个...另外,再有的方法就是用group by()嵌套代替count(distinct a)。 如果能用group by的就尽量使用group by,因为group by性能distinct更好

1.2K20

MySQL优化总结

这些都会导致严重的性能开销 尽量将列设置为NOT NULL a.可为NULL的列占用更多的存储空间 b.可为NULL的列,在使用索引值比较时,mySQL需要做特殊的处理,损耗一定的性能 建议:通常最好指定列为...优化建议 1.首先了解一下sql的执行顺序,使我们更好的优化 (1)FROM:数据从硬盘加载到数据缓冲区,方便对接下来的数据进行操作 (2)ON:join on实现多表连接查询,先筛选on的条件,再连接表...,影响性能 5.用exists、not existsin、not in相互替代 原则是哪个的子查询产生的结果集小,就选哪个 select * from t1 where x in (select y...可以帮助选择更好的索引写出更优化的查询语句。 例: explain SELECT user_name from sys_user where user_id <10 ?...常用的类型有:ALL->index->range->ref->eq_ref->const->system(从左到右,性能从差到好,至少得达到range) possible_keys指出MySQL能使用哪个索引在该表中找到行

1.7K40

MySQL表连接优化的初步分析

所以从执行计划来看,为什么性能差,最后优化器的判断是对两个大表做了全表扫描。...那么这里就有两个问题, 同样是表关联,小表大表关联大表小表关联,这种写法在MySQL那么重要吗是否join的写法效果要更好一些? 要验证这两个问题,其实也不难。我们使用如下的SQL来验证。...然后第二个问题,是否join的方式要更好一些? 我们可以把表关联写为大表 join 小表,看看效果如何。...的性能是比较差的,大概1分钟后才有反应。...我们简单总结一下,在这个SQL优化场景中,为了得到更好性能,需要做到一个平衡,即小表大表的关联方式,效率是最佳的,至于你是写成join还是逗号分隔的表关联,从目前的测试来看,差别不大。

1.5K20
领券