distinct和distinctiveSQL-去重Groupby和Distinct的效率
经实际测试,同等条件下,5千万条数据,Distinct⽐Group by效率⾼,但是,这是有条件的,这五千万条数据中不重复的仅仅有三⼗多万条,这意味着,五千万条中基本都是重复数据。
为了验证,重复数据是否对其有影响,本⼈针对80万条数据进⾏测试:
下⾯是对CustomerId去重,CustomerId的重复项及其多,80万条中仅仅50条不重复的。可以看到,Distinct快⼀点。
⽤例1:
⽤例2:
下⾯是对Id去重,Id基本唯⼀,80万条中没有重复的。可以看到,Group By更快。
综上所述,其他条件⼀定时,数据重复项越多,distinct效率越⾼,反之,数据越唯⼀,group by效率越⾼。(测试⽤例较少,时间差距其实不明显,受电脑影响,数据有时不准。所以具体数据具体试验,不要盲⽬使⽤,⼈云亦云。)
原因:
distinct需要将列中的全部内容都存储在⼀个内存中,可以理解为⼀个hash结构,key为列的值,最后计算hash结构中有多少个key即可得到结果。
很明显,需要将所有不同的值都存起来,因此重复数据越多,需要存储的不同项也越少。但这种⽅式内存消耗可能较⼤,看你电脑。
⽽group by的⽅式是先将列排序。⽽数据库中的group⼀般使⽤sort的⽅法,即数据库会先对列进⾏排序。⽽排序的基本理论是,时间复杂为nlogn,空间为1.,然后只要单纯的计数就可以了。优点是空间复杂度⼩,缺点是要进⾏⼀次排序,执⾏时间会较长。
两中⽅法各有优劣,在使⽤的时候,我们需要根据实际情况进⾏取舍,不要⼀⼑切。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。