SQL语句中 distinct 是个不常用到,但是又比较好用的家伙 在和她组队的SELECT语句中,可以让大家少走弯路
distinct 有时候有点像 GROUP BY语句的作用,但是他是前置在SELECT 关键字之后的 ;
她和GROUP BY的区别如果在单行数据或者并表查询中没有多大区别
例如数据库:
这个结构的一个保存诗词的数据库表 需要查询出作者,就使用语句
- SELECT poems_author FROM os_poems GROUP BY poems_author;
以及
- 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的效率会大大提升