pg数据库查询重复数据并可识别空数据列重复(二)--优化
来源:互联网 发布:olap 大数据 实现方案 编辑:程序博客网 时间:2024/05/16 13:50
在上一篇文章中,实现了查询重复数据与删除多余重复数据的sql编写:http://blog.csdn.net/u011099093/article/details/78596034;
但是经过导入百万数据测试,查询语句直接卡住没有结果,于是又花了一天时间对sql进行优化,在借鉴了如下地址的方法后,编写出优化后的查重及去重sql:
https://yq.aliyun.com/articles/68224#15
优化查询重复数据:SELECT A,B,C,D,E FROM( SELECT A,B,C,D,E,COUNT(*) OVER(PARTITION BY A,B,C )AS tmp FROM TABLE WHERE CONDITION) t WHERE t.tmp>=2;
优化处理重复数据:
DELETE FROM TABLE WHERE ID NOT IN(SELECT ID FROM
(SELECT MIN(ID) ID,A,B,C FROM TABLE WHERE CONDITION GROUP BY A,B,C HAVING COUNT(*)>1) C)
AND ID IN( SELECT ID FROM
(SELECT ID,COUNT(*) OVER(PARTITION BY A,B,C) AS tmp FROM TABLE WHERE CONDITION)t WHERE t.tmp>=2);
对于over partition的用法我真的不是很了解,而上述地址中对重复 数据清洗讲的比较详细,有兴趣的同学可移步去看看。
-------------------------------------------11-29更新-------------------------------------------------------
经过比较发现使用row_number()函数替换count(*) 查重变得更快速,而这里查出的重复数据发生了改变,不再是所有重复数据,而是每种都保留1条未查出,所以对应的处理SQL也会发生改变:
DELETE FROM TABLE WHERE ID IN( SELECT ID FROM
(SELECT ID,ROW_NUMBER() OVER(PARTITION BY A,B,C) AS tmp FROM TABLE WHERE CONDITION)t WHERE t.tmp>=2);
ROW_NUMBER是一个对所查数据编号排序的函数所以如果上述查重及去重语句如果能在OVER(PARTITION BY A,B,C) AS tmp 中添加order by进行按字段排序,结果将更加准确;
- pg数据库查询重复数据并可识别空数据列重复(二)--优化
- pg数据库查询重复数据并可识别空数据列重复
- 数据库查询 去掉 某列重复数据
- 查询数据库重复数据
- php利用数组函数,查询并删除数据库多列重复数据
- Mysql数据库查询重复数据
- 查询数据库中的重复数据
- 查询数据库表重复数据
- 删除数据库列中重复数据
- 数据库删除指定列重复数据
- PHP数组——数据库查询的二维数组降维并删除重复数据重复
- mysql查询重复数据并保留一条
- SQL 查询重复数据并显示重复次数
- SQL 查询重复数据并显示重复次数
- Mysql查询重复数据并按条件删除重复行
- 数据库查询时过滤重复数据
- Sql查询与删除数据库重复数据
- Sql查询重复数据
- CRF简单随机场
- angularjs2环境搭建
- 助你快速踏入高薪职场——2017面试集锦之EJB
- Woocomerce接入支付宝支付功能(一)——创建应用以及请求支付
- 1.小简称
- pg数据库查询重复数据并可识别空数据列重复(二)--优化
- 使用ArrayList集合,对其添加100个不同的元素
- CSS
- mysql视图的简单介绍
- 文件上传漏洞
- Java代码实现多线程下载和断点续传
- 安卓生成数字证书
- 优化
- 字符串操作和一级指针内存模型