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

面试官:MySQL distinctgroup by 哪个效率更高?

先说大致结论(完整结论在文末): 在语义相同,有索引情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引情况下:distinct效率高于group by。...rows in set (0.01 sec) DISTINCT 关键词用于返回唯一不同。...如果列具有NULL,并且对该列使用DISTINCT子句,MySQL将保留一个NULL,并删除其它NULL,因为DISTINCT子句将所有NULL视为相同。...因为group by和distinct近乎等价,distinct可以被看做是特殊group by。 在语义相同,无索引情况下: distinct效率高于group by。...但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引情况下,group by和distinct执行效率也是近乎等价

33310

MySQLGROUP BY和DISTINCT:去重效果与用法解析

MySQL数据库中,经常会遇到需要对数据进行分组和去重情况。为了达到这个目的,我们通常会使用GROUP BY和DISTINCT这两个关键字。虽然它们都可以用于去重,但是它们具有不同用法和效果。...本文将详细解析MySQLGROUP BY和DISTINCT用法,并比较它们对同一字段去重效果是否相同。...从上面的两个查询可以看出,DistinctGroup By效果是相同,都能够去除重复字段。然而,它们之间存在一些细微差异。...结论通过本文介绍,我们了解了MysqlGroupDistinct用法,并对它们进行了比较和对比。Group By关键字用于将结果集按照指定字段进行分组,适用于分组计算和聚合操作。...Distinct关键字用于去除结果集中重复字段,适用于单个字段去重操作。在对同一字段进行去重时,Group By和Distinct效果是相同Group By还可以用于多个字段分组操作。

1.4K50
您找到你想要的搜索结果了吗?
是的
没有找到

京东一面:MySQL distinctgroup by 哪个效率更高?太刁钻了吧!

先说大致结论(完整结论在文末): 在语义相同,有索引情况下:group by和distinct都能使用索引,效率相同。 在语义相同,无索引情况下:distinct效率高于group by。...rows in set (0.01 sec) DISTINCT 关键词用于返回唯一不同。...如果列具有NULL,并且对该列使用DISTINCT子句,MySQL将保留一个NULL,并删除其它NULL,因为DISTINCT子句将所有NULL视为相同。...因为group by和distinct近乎等价,distinct可以被看做是特殊group by。 在语义相同,无索引情况下: distinct效率高于group by。...但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引情况下,group by和distinct执行效率也是近乎等价

2K30

MySQL中使用group by出现1055错误解决办法

注:由于执行sql进行修改方法在重启mysql后会失效,所以本文仅介绍通过修改配置文件从而永久解决该问题办法 在MYSQL中通过GROUP BY查询数据时报错如下 [Err] 1055 - Expression...=only_full_group_by 如下图: 在Navicat中或是登录mysql,通过sql_mode查询支持语法: select @@sql_mode; 结果如下: ONLY_FULL_GROUP_BY...应该支持sql语法,对数据校验等 解释:ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中列,没有在GROUP BY中出现,那么将认为这个SQL是不合法...,因为列不在GROUP BY从句中 因为有only_full_group_by,所以我们要在MySQL中正确使用group by语句的话,只能是select column1(只能是一个字段) from...tb1 group by column1(即只能展示group by字段,其他均都要报1055错,如下图) 我们需要修改sql_mode,Linux中操作如下: 修改根目录中/etc

32210

你好奇过 MySQL 内部临时表存了什么吗?

第 2 步,如果 e1 字段对应记录在临时表中已经存在,执行 count(i1) 函数得到当前分组新计数,然后把分组新计数更新到临时表。...第 3 步,如果 e1 字段对应记录在临时表中还不存在,执行 count(i1) 函数初始化分组计数,然后把 e1 字段和分组计数插入到临时表中。...如果写入失败,说明临时表中已经有该 i1 字段对应记录了,此时,写入失败错误会被忽略,因为这正是我们想要结果:对 i1 字段去重。...总结 第 2 小节,列出了 MySQL 使用临时表部分场景,这些场景反正也记不住,就不用记了,了解下就好。...对于 group by,临时表中会写入存储引擎返回 server 层所有字段,写入临时表字段内容,可能是字段,也可能是聚合函数基于字段计算结果;对于 distinct,临时表中会写入聚合函数中字段

1.5K20

mysql使用default列设置默认问题

对于add column,会将历史为null刷成default指定。 而对于modify column,只会对新数据产生影响,历史数据仍然会保持为null。...结论: 1. add column和modify column在default语义上存在区别,如果想修改大表历史数据,建议一个新update语句(不管是add column还是modify column...即使指定了default,如果insert时候强制指定字段为null,入库还是会为null 3....结论:mysql 默认只有在insert语句中没有这个字段时才会生效,如果insert中有插入该字段而该字段取值又为null,null将被插入到表中,默认值此时失效。...本篇文章如有帮助到您,请「翎野君」点个赞,感谢您支持。 首发链接:https://www.cnblogs.com/lingyejun/p/17581523.html

53610

Mysql 常用命令记录与数据导入导出

PS4: 如果大家觉得我写不好,大家介绍一个mysql学习网站unoob.com ,这个网站有队mysql基本入门介绍,且分类,示例都做比较好。(我也是在上面学习哈哈哈哈)。...想要实现类似于:“name字段去重,对于重复取分数最高”这种效果需要自己实现,distinct不可以。...group by group by语句可以实现对数据以一列或者多列进行分组,例如可以使用group by实现distinct功能。...select name from record group by name 而在实际使用过程中,group by 语句经常和函数(求和,求均值,计数等)一起使用,(毕竟如果分组不是为了统计,那将毫无意义...即: //错误语句 select name,score from record group by name; 会报错。

3.1K40

MySQL(五)汇总和分组数据

②获得表中行组和 ③找出表列(或所有行或某些特定行)最大、最小和平均值 聚集函数(aggregate function):运行在行组上,计算和返回单个函数(MySQL还支持一些列标准偏差聚集函数...子句保证只统计某个指定列数值; PS:利用标准算数操作符,所有聚集函数都可用来执行多个列上计算(sum()函数忽略列为null行) 6、distinct与聚集函数 MySQL5.0.3以及之后版本...products表中items数目、price最高、最低以及平均值) PS:在指定别名以包含某个聚集函数结果时,不应该使用表中实际列名;这样便于使用SQL更加容易和理解,以及排除方便排除错误。...二、分组数据 1、group by创建分组 在MySQL中,分组是在select语句中group by子句中建立,比如: select vend-id,count(*) as num_prods from...products group by vend_id; 这条SQL语句指定了2个列,group by指示MySQL按照vend_id排序并且分组(如果使用group by,则不必指定要计算每个组) group

4.6K20

关于mysql列加索引这个列中有null情况

有时看了一下规律,是这样他有一个字段区分度还是很低 所以说吧区分度低放在后面区分度高放在前面。...由于联合索引是先以 前面的排序在根据后面的排序所以说将区分度高放在前面会减少扫描行数增加查询效率 但是最重要问题来了,我就要提交SQL时候 leader 问了一句我,你这边的话这个数据字段 默认为...我说是的默认为 null(按照规定这玩意是不能null 应该 not null,但是是历史数据 我这变也没改(其实这两个字段也是我之前实习时候加)),于是她说这样的话索引会失效, 于是我就在想为什么啊...B+树 不能存储为null字段吗。想想也是啊 为null 这个key 怎么建立啊,怎么进行区分呢?...所以说这个null一定是加到B+ 树里面了 但是这个就会哟疑问了 索引key为null在B+树是怎么存储着呢 ???

4.2K20

「干货」Hive常用10大应用技巧『Hive系列2』

将较大表放在inner join操作符右侧,可以提高查询效率,执行速度快,不容易出现计算内存溢出错误。...正确写法 A join B on A.key=B.key ; 错误写法 from A ,B where A.key=B.key ; 下面写法在mysql/oracle等价于内连接,但是在Hive中会导致笛卡尔积...07 distinctgroup by区别「计数场景」 在去重计数场景中,我们经常应用count(distinct)来进行处理;有时也会先在内层通过group by聚合,然后再在外层计数count(...原理:distinct需要将col列中全部内容都存储在一个内存中,可以理解为一个hash结构,key为col,最后计算hash结构中有多少个key即可得到结果。...需要将所有不同存储在一起,内存消耗较大。 优点:时间复杂度低,适用于中小数据量级。

1.7K10

count(distinct) 玩出了新花样

介绍使用索引、临时表 + 文件排序实现 group by,以及单独介绍临时表三篇文章中,多次以 count(distinct) 作为示例说明。...回到正题,MySQL 使用 MEMORY 引擎临时表实现 count(distinct) 去重功能时,玩出了新花样,所以,还是值得写一下。背景说明到此为止,我们快快开始。...i1) from t_group_by group by e1 在调试过程中,我 t_group_by 表 e1 字段建了索引,所以 SQL 执行时就不需要先对表中记录进行排序了。...从 t_group_by 表读取一条记录之后,i1 字段作为新结点数据插入到红黑树中,然后回到第 1 步继续执行。...第 3 小节,以循序渐进方式介绍了 MySQL 为什么选择使用红黑树实现 count(distinct) 去重功能。

1.5K20

MySQL最常用分组聚合函数

一、聚合函数(aggregation function)—也就是组函数   在一个行集合(一组行)上进行操作,对每个组一个结果。...常用组函数: AVG([distinct] expr) 求平均值 COUNT({*|[distinct] } expr) 统计行数量 MAX([distinct] expr) 求最大 MIN([distinct...] expr) 求最小 SUM([distinct] expr) 求累加和   ①每个组函数接收一个参数   ②默认情况下,组函数忽略列为null行,不参与计算   ③有时,会使用关键字distinct...列):返回列非空、并且列不重复数量 mysql> select count(distinct salary) from salary_tab; +---------------------...2、GROUP_CONCAT()函数   函数等于属于一个组指定列所有,以逗号隔开,并且以字符串表示。

5.1K20

MySQL最常用分组聚合函数

一、聚合函数(aggregation function)---也就是组函数 在一个行集合(一组行)上进行操作,对每个组一个结果。...常用组函数: AVG([distinct] expr) 求平均值 COUNT({*|[distinct] } expr) 统计行数量 MAX([distinct] expr) 求最大 MIN([distinct...] expr) 求最小 SUM([distinct] expr) 求累加和   ①每个组函数接收一个参数   ②默认情况下,组函数忽略列为null行,不参与计算   ③有时,会使用关键字distinct...列):返回列非空、并且列不重复数量 mysql> select count(distinct salary) from salary_tab; +---------------------...2、GROUP_CONCAT()函数   函数等于属于一个组指定列所有,以逗号隔开,并且以字符串表示。

5.1K10

SQL语句逻辑执行过程和相关语法详解

例如select distinct a,b from t order by c;是错误。但MySQL和mariadb又在这里进行了扩展,它们排序列允许非select_list中列。...假如DISTINCT消除了部分列重复,最终将只返回一条重复记录,而如果使用非select_list列排序,将要求返回一条重复记录同时还要返回每个重复对应多条记录以便排序,而在要求范式关系表中是无法整合这样结果...1.9 关于标准SQLGROUP BY 如果让我SQL语句逻辑执行顺序划分为两段式,我会将"三八线"划在GROUP BY这里。...关于GROUP BY,有以下两个问题: 1.为什么分组之后涉及到对组操作时只允许返回标量值? 标量值即单个,比如聚合函数返回就是标量值。...假如先执行DISTINCT去重再执行OVER,那么去重后再对具有唯一列(或多列)进行开窗就没有任何意义。

3.4K20

MySql】聚合函数&&group by&&OJ题目

本篇主要介绍mysql聚合函数和group by使用,最后是OJ题目的练习。...聚合函数 MySQL聚合函数用于对数据进行计算和统计,常见聚合函数包括下面列举出来聚合函数: 函数 说明 COUNT([DISTINCT] expr) 返回查询到数据数量...] expr) 返回查询到数据最大,不是数字没有意义 MIN([DISTINCT] expr) 返回查询到数据最小,不是数字没有意义 对于上面所列举出来聚合函数,下面我们通过一些案例来进行对聚合函数运用...distinct select distinct count(distinct math) from exam_result; 统计数学成绩总分 select sum(math) from exam_result...不要单纯认为只有在磁盘上表结构导入到mysql,真实存在表才叫做表,中间筛选出来包括最终结果全部都是逻辑上表,可以理解为mysql一切皆为表。

16010
领券