logo
当前位置:首 页 > 编程技术 >后端开发 >mysql > 查看文章

MySQL中distinct的使用方法

mysql, 后端开发, 编程技术 你是第45个围观者 0条评论 供稿者: 标签:,

SQL语句中 distinct 是个不常用到,但是又比较好用的家伙 在和她组队的SELECT语句中,可以让大家少走弯路

distinct 有时候有点像 GROUP BY语句的作用,但是他是前置在SELECT 关键字之后的 ;

她和GROUP BY的区别如果在单行数据或者并表查询中没有多大区别

 

例如数据库:

这个结构的一个保存诗词的数据库表 需要查询出作者,就使用语句

  1. SELECT poems_author FROM os_poems GROUP BY poems_author;

 

以及

  1. SELECT distinct poems_author FROM os_poems GROUP BY poems_author;

 

得出结果 是一样的:

但是效率上来说  distinct 会全表查询数据做去重的操作 而且不会去检索索引,这个虽然和GROUP BY差不多 ,但是如果GROUP BY如果语句命中索引的话会大大增加效率 ;

 

如果数据量大的话,这个就合适了;

 

还有一个区别是,多个字段用group by需要添加多个用例 distinct只要一个,但是在不同的场景有可能他们会暴露出问题。

 

两者的区别是:

《**DISTINCT:**这种方式会将全部内容存储在一个hash结构里,最后通过计算hash结构中key的个数即可得到结果,典型的以空间换取时间的方式。**GROUP BY:**这种方式是先将字段排序(一般使用sort),然后进行计数,典型的以时间换取空间。

了解原理之后,我们可以得出,数据越是离散,DISTINCT需要消耗的空间越大,效率也就越低,此时GROUP BY的空间优势就显现了;相反,数据越是集中,DISTINCT空间占用变小,时间优势就显现出来了。》 (摘抄自 csdn –奔跑的码农

如果有建立索引而且能命中的话 group by的效率会大大提升

 

 

 

 

 

 

说说梦想,谈谈感悟 ,聊聊技术 https://github.com/cjx2328

—— 陈 建鑫

陈建鑫
你可能也喜欢Related Posts
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容。站长联系:cjx2328#126.com(修改#为@)
Copyright ©ziao design Studio All Rights Reserved.沪ICP备14052271号-3