mysql中去重 用group by优化distinct 用法

mysql中去重 用group by优化distinct 用法,第1张

在使用 MySQL 时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段,例如有如下表user:

用distinct来返回不重复的用户名:select distinct name from user,结果为:

这样只把不重复的用户名查询出来了,但是用户的id,并没有被查询出来:select distinct name,id from user,这样的结果为:

distinct name,id 这样的mysql 会认为要过滤掉name和id两个字段都重复的记录,如果sql这样写:select id,distinct name from user,这样mysql会报错,因为distinct必须放在要查询字段的开头。

所以一般distinct用来查询不重复记录的条数。

如果要查询不重复的记录,有时候可以用group by :

select id,name from user group by name

首先对于MySQL的DISTINCT的关键字的一些用法:1.在count不重复的记录的时候能用到,比如SELECTCOUNT(DISTINCTid)FROMtablename;就是计算talbebname表中id不同的记录有多少条。2,在需要返回记录不同的id的具体值的时候可以用,比如SELECTDISTINCTidFROMtablename;返回talbebname表中不同的id的具体的值。3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义,比如SELECTDISTINCTid,typeFROMtablename;实际上返回的是id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样。4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的。5.其实还有另外一种解决方式,就是使用,SELECTid,type,count(DISTINCTid)FROMtablename,虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据),返回的结果是只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了。DISTINCT的效率:SELECTid,type,count(DISTINCTid)FROM tablename虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据),SELECTid,typefromtablenamegroupbyid这样貌似也可以,用distinct的时候,如果它有索引,mysql会把它转成groupby的方式执行。 MySQL数据库对于COUNT(*)的不同处理会造成不同的结果,比如,执行:SELECTCOUNT(*)FROMtablename即使对于千万级别的数据mysql也能非常迅速的返回结果。 执行:SELECTCOUNT(*)FROMtablenameWHERE…..mysql的查询时间开始攀升。 网上查资料得知:当没有WHERE语句对于整个mysql的表进行count运算的时候,MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索,从而得出count的数值,因此加上where条件的查询速度就会很慢了。以上关于MySQL数据库的distinct以及count(*)的使用就介绍到这里了,希望本次的介绍能够带给您一些收获。

这两者本质上应该没有可比性,distinct 取出唯一列,group by 是分组,但有时候在优化的时候,在没有聚合函数的时候,他们查出来的结果也一样。

一、group by

英 [ɡru:p bai]   美 [ɡrup baɪ]

[计][WIN]分组依据

拓展资料

1、This operator also serves as input to the Group By operator.

该 *** 作符还充当Group By *** 作符的输入。

2、Complete the following steps to create and program the Group By operator.

完成以下步骤,创建Group By *** 作符并对它进行配置。

3、With the appropriate access path, the ORDER BY or GROUP BY requirement can be met without sorting.

使用恰当的访问路径,无需排序即可满足ORDER BY或GROUP BY需求。

4、Drag it to the right of the Group By operator.

将它拖放到Group By *** 作符的右边。

二、distinct

英 [dɪˈstɪŋkt]   美 [dɪˈstɪŋkt]

adj.明显的,清楚的卓越的,不寻常的有区别的确切的

拓展资料

1、I have distinct memories of him in his last years.

我清楚地记得他最后几年的情况。

2、Another Cup marathon between the two sides is now a distinct possibility.

双方很可能再进行一场马拉松式的优胜杯比赛。

3、The photograph showed a distinct image.

照片显出了明晰的影像。

4、I want a distinct answer to my question.

我要求对我的问题作出明确的答复。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7375903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存