zoukankan      html  css  js  c++  java
  • SQL -去重Group by 和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.,然后只要单纯的计数就可以了。优点是空间复杂度小,缺点是要进行一次排序,执行时间会较长。

     两中方法各有优劣,在使用的时候,我们需要根据实际情况进行取舍,不要一刀切。

  • 相关阅读:
    centos7安装ELS7.2.1
    简单搭建es环境并配置keyword检索
    拦截器执行顺序及查看方法
    JPA同时支持精准搜索和模糊搜索
    Vue开发之devtools
    Linux配置本地yum源
    Nginx编译安装
    VS2017 DUMP文件调试
    磁共振序列相关知识点记录
    C#高级编程笔记(一)
  • 原文地址:https://www.cnblogs.com/lvqiang/p/14313331.html
Copyright © 2011-2022 走看看