婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > postgresql 刪除重復數據的幾種方法小結

postgresql 刪除重復數據的幾種方法小結

熱門標簽:智能電銷機器人教育 高德地圖標注電話怎么沒了 北京智能外呼系統供應商家 中國地圖標注省份用什么符號 無錫梁溪公司怎樣申請400電話 孝感銷售電銷機器人廠家 電話機器人錄音師薪資 江西穩定外呼系統供應商 奧維地圖標注字體大小修改

在使用PG數據庫的這段時間,總結了三種刪除重復數據的方法,其中最容易想到的就是最常規的刪除方法,但此方法性能較差,刪數據耗時較久,雖容易實現,但性能太差,影響寫數據的速率。

另外就是被使用的group by刪除方法,效率較高。

還有一種是剛發現的,還沒有驗證,現在就總結下這三種刪除方法,并驗證各自的執行效率。

首先創建一張基礎表,并插入一定量的重復數據。

  test=# create table deltest(id int, name varchar(255));
  CREATE TABLE
  test=# create table deltest_bk (like deltest);
  CREATE TABLE
  test=# insert into deltest select generate_series(1, 10000), 'ZhangSan';
  INSERT 0 10000
  test=# insert into deltest select generate_series(1, 10000), 'ZhangSan';
  INSERT 0 10000
  test=# insert into deltest_bk select * from deltest;

常規刪除方法

最容易想到的方法就是判斷數據是否重復,對于重復的數據只保留ctid最小(或最大)的那條數據,刪除其他的數據。

test=# explain analyse delete from deltest a where a.ctid > (select min(t.ctid) from deltest t where a.id=t.id);
                               QUERY PLAN
  -----------------------------------------------------------------------------------------------------------------------------
  Delete on deltest a (cost=0.00..195616.30 rows=1518 width=6) (actual time=67758.866..67758.866 rows=0 loops=1)
    -> Seq Scan on deltest a (cost=0.00..195616.30 rows=1518 width=6) (actual time=32896.517..67663.228 rows=10000 loops=1)
     Filter: (ctid > (SubPlan 1))
     Rows Removed by Filter: 10000
     SubPlan 1
      -> Aggregate (cost=128.10..128.10 rows=1 width=6) (actual time=3.374..3.374 rows=1 loops=20000)
         -> Seq Scan on deltest t (cost=0.00..128.07 rows=8 width=6) (actual time=0.831..3.344 rows=2 loops=20000)
            Filter: (a.id = id)
            Rows Removed by Filter: 19998
  Total runtime: 67758.931 ms
  test=# select count(*) from deltest;
  count
  -------
  10000
  (1 行記錄)

可以看到,id相同的數據,保留ctid最小的那條,其他的刪除。相當于把deltest表中的數據刪掉一半,耗時達到67s多。相當慢。

group by刪除方法

第二種方法為group by方法,通過分組找到ctid最小的數據,然后刪除其他數據。

  test=# truncate table deltest;
  TRUNCATE TABLE
  test=# insert into deltest select * from deltest_bk;
  INSERT 0 20000
  test=# explain analyse delete from deltest a where a.ctid not in (select min(ctid) from deltest group by id);
                               QUERY PLAN
  ----------------------------------------------------------------------------------------------------------------------------------
  Delete on deltest a (cost=131.89..2930.46 rows=763 width=6) (actual time=30942.496..30942.496 rows=0 loops=1)
    -> Seq Scan on deltest a (cost=131.89..2930.46 rows=763 width=6) (actual time=10186.296..30814.366 rows=10000 loops=1)
     Filter: (NOT (SubPlan 1))
     Rows Removed by Filter: 10000
     SubPlan 1
      -> Materialize (cost=131.89..134.89 rows=200 width=10) (actual time=0.001..0.471 rows=7500 loops=20000)
         -> HashAggregate (cost=131.89..133.89 rows=200 width=10) (actual time=10.568..13.584 rows=10000 loops=1)
            -> Seq Scan on deltest (cost=0.00..124.26 rows=1526 width=10) (actual time=0.006..3.829 rows=20000 loops=1)
   Total runtime: 30942.819 ms
  (9 行記錄)
  test=# select count(*) from deltest;
   count
  -------
  10000
  (1 行記錄)

可以看到同樣是刪除一半的數據,使用group by的方式,時間節省了一半。但仍含需要30s,下面試一下第三種刪除操作。

新的刪除方法

在postgres修煉之道這本書中,作者提到一種效率較高的刪除方法, 在這里驗證一下,具體如下:

  test=# truncate table deltest;
  TRUNCATE TABLE
  test=# insert into deltest select * from deltest_bk;
  INSERT 0 20000                             
  test=# explain analyze delete from deltest a where a.ctid = any(array (select ctid from (select row_number() over (partition by id), ctid from deltest) t where t.row_number > 1));
                               QUERY PLAN
  ----------------------------------------------------------------------------------------------------------------------------------
  Delete on deltest a (cost=250.74..270.84 rows=10 width=6) (actual time=98.363..98.363 rows=0 loops=1)
  InitPlan 1 (returns $0)
   -> Subquery Scan on t (cost=204.95..250.73 rows=509 width=6) (actual time=29.446..47.867 rows=10000 loops=1)
      Filter: (t.row_number > 1)
      Rows Removed by Filter: 10000
      -> WindowAgg (cost=204.95..231.66 rows=1526 width=10) (actual time=29.436..44.790 rows=20000 loops=1)
         -> Sort (cost=204.95..208.77 rows=1526 width=10) (actual time=12.466..13.754 rows=20000 loops=1)
            Sort Key: deltest.id
            Sort Method: quicksort Memory: 1294kB
            -> Seq Scan on deltest (cost=0.00..124.26 rows=1526 width=10) (actual time=0.021..5.110 rows=20000 loops=1)
  -> Tid Scan on deltest a (cost=0.01..20.11 rows=10 width=6) (actual time=82.983..88.751 rows=10000 loops=1)
     TID Cond: (ctid = ANY ($0))
  Total runtime: 98.912 ms
  (13 行記錄)
  test=# select count(*) from deltest;
  count
  -------
  10000
  (1 行記錄)

看到上述結果,真讓我吃驚了一把,這么快的刪除方法還是首次看到,自己真實孤陋寡聞,在這里要膜拜一下修煉之道這本書的大神作者了。

補充:pgsql 刪除表中重復數據保留其中的一條

1.在表中(表名:table 主鍵:id)增加一個字段rownum,類型為serial

2.執行語句:

delete from table where rownum not in( 
select max(rownum) from table group by id 
)

3.最后刪除rownum

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • PostgreSQL 刪除check約束的實現
  • postgresql刪除主鍵的操作
  • PostgreSQL 實現快速刪除一個用戶
  • postgresql 實現多表關聯刪除
  • Postgresql創建新增、刪除與修改觸發器的方法
  • PostgreSQL刪除更新優化操作
  • mybatis postgresql 批量刪除操作方法
  • postgresql 刪除重復數據案例詳解

標簽:泰州 海北 通化 那曲 臨滄 阜陽 齊齊哈爾 荊州

巨人網絡通訊聲明:本文標題《postgresql 刪除重復數據的幾種方法小結》,本文關鍵詞  postgresql,刪除,重復,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《postgresql 刪除重復數據的幾種方法小結》相關的同類信息!
  • 本頁收集關于postgresql 刪除重復數據的幾種方法小結的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产成人亚洲综合a∨猫咪| 精品国产伦一区二区三区免费| 成人免费视频免费观看| 极品美女销魂一区二区三区免费| 欧美中文字幕不卡| 日韩美女在线视频| 欧美一区二区视频观看视频| 亚洲影视在线观看| 国产成人亚洲综合色影视| 337p亚洲精品色噜噜| 亚洲综合一区二区三区| 国产乱码精品一区二区三| 欧美日韩国产首页在线观看| 午夜激情综合网| 色婷婷精品大在线视频 | 中文字幕在线一区免费| 天天色 色综合| 欧美日韩精品欧美日韩精品一| 国产精品久久免费看| 精品一区二区三区香蕉蜜桃| 欧美成人猛片aaaaaaa| 亚洲一区二三区| 99视频超级精品| 一区二区不卡在线视频 午夜欧美不卡在| 国产在线精品免费| 欧美一区二区三区电影| www.爱久久.com| 亚洲视频一区在线观看| 国产精品一级二级三级| 日韩欧美一级精品久久| 国产精品中文字幕日韩精品 | 蜜臀av国产精品久久久久 | 久久国产精品色婷婷| 欧美日韩国产高清一区二区| 久久免费午夜影院| 福利电影一区二区| 欧美国产成人精品| 成人做爰69片免费看网站| 国产精品免费网站在线观看| 丁香天五香天堂综合| 日本一区二区三级电影在线观看| 99视频一区二区| 亚洲欧美日韩久久精品| 91亚洲男人天堂| 视频一区免费在线观看| 欧美一区二区三区在线看| 奇米精品一区二区三区在线观看| 久久久午夜电影| 国产精品996| 国产日韩一级二级三级| 91国偷自产一区二区开放时间| 一区二区三区视频在线看| 精品视频1区2区| 国产精品一级片在线观看| 中文字幕+乱码+中文字幕一区| 粉嫩13p一区二区三区| 亚洲图片欧美综合| 欧美一区二区在线观看| 九色综合国产一区二区三区| 欧美日韩高清一区二区三区| 理论片日本一区| 综合在线观看色| 欧美男同性恋视频网站| 麻豆久久一区二区| 免费成人在线观看| 国产片一区二区| 日本韩国视频一区二区| 日本在线不卡视频一二三区| 国产精品国产三级国产普通话蜜臀 | 欧美一卡2卡三卡4卡5免费| 理论片日本一区| 国产精品初高中害羞小美女文| 日韩一级片在线播放| 国产成人啪免费观看软件| 综合分类小说区另类春色亚洲小说欧美| 国产精品资源在线看| 亚洲欧美日韩在线播放| 欧美一区二区三区人| 国产成a人亚洲精品| 久久精品国产**网站演员| 国产精品午夜久久| 欧美日韩久久久| 欧美电视剧免费观看| 欧美日韩1234| 国产成人一区在线| 午夜国产精品影院在线观看| 亚洲精品日韩一| 久久你懂得1024| 欧美伊人久久大香线蕉综合69 | 成人黄色大片在线观看| 国产精品三级av| 久久综合给合久久狠狠狠97色69| 99久精品国产| 国产在线观看免费一区| 国产精品美女久久久久aⅴ| 久久九九国产精品| 精品视频一区三区九区| 国产成人免费av在线| 久久精品99久久久| 一区二区日韩电影| 国产精品福利在线播放| 欧美韩日一区二区三区四区| 欧美一区二区三区免费观看视频| 91丝袜国产在线播放| 国产精品中文有码| 国产福利一区在线观看| 全部av―极品视觉盛宴亚洲| 一区二区三区产品免费精品久久75| 国产亚洲精品7777| 国产午夜精品在线观看| 日韩一区二区电影网| 欧美午夜精品电影| 国产不卡视频一区| 91影院在线观看| 成人性生交大片免费看中文| 国产又黄又大久久| 国产高清视频一区| 国产精品一级二级三级| 韩国理伦片一区二区三区在线播放| 国产伦精一区二区三区| 经典一区二区三区| 久久99精品一区二区三区三区| 洋洋av久久久久久久一区| 午夜精品福利久久久| 亚洲成人免费看| 亚洲一区视频在线| 精品一区二区三区的国产在线播放| 奇米四色…亚洲| 卡一卡二国产精品| 成人晚上爱看视频| k8久久久一区二区三区| 高清国产一区二区三区| 高清国产一区二区三区| 国产成人精品影视| 亚洲综合在线观看视频| 偷拍日韩校园综合在线| 午夜精品久久久久久久久久| 视频一区二区中文字幕| 国产v综合v亚洲欧| 成人av网站免费| 99精品一区二区| 91久久人澡人人添人人爽欧美 | 国产一区二区三区免费播放| 亚洲午夜一二三区视频| 久久99久久久久| 国产一区二区h| 91麻豆免费看| 欧美日韩精品高清| 26uuu国产电影一区二区| 亚洲天堂久久久久久久| 久久精品国产久精国产爱| 一本色道久久综合亚洲精品按摩 | 一区二区三区丝袜| 国产成人一区二区精品非洲| 欧美日韩一区二区电影| 国产精品欧美极品| 麻豆91小视频| 在线视频中文字幕一区二区| 国产午夜三级一区二区三| 三级在线观看一区二区| 99久久国产综合精品麻豆| 精品久久久久av影院| 亚洲v日本v欧美v久久精品| 成人精品国产一区二区4080| 日韩三级高清在线| 亚洲一区二区三区四区五区黄 | 日韩成人一区二区| 亚洲免费色视频| 经典一区二区三区| 91豆麻精品91久久久久久| 日韩欧美高清dvd碟片| 中日韩免费视频中文字幕| 免费高清在线视频一区·| 91精品福利在线| 国产精品美女久久久久久久久久久| 久草中文综合在线| 91精品综合久久久久久| 一区二区三区成人在线视频| 成人精品视频网站| 国产农村妇女毛片精品久久麻豆 | 欧美高清视频不卡网| 国产精品福利在线播放| 国内精品嫩模私拍在线| 91精品久久久久久久91蜜桃| 亚洲午夜电影网| 一本一道久久a久久精品| 亚洲欧美在线观看| 成人精品国产一区二区4080| 久久蜜桃av一区精品变态类天堂 | 欧美肥妇free| 欧美精品久久一区| 日韩成人一级大片| 欧美激情一区二区三区在线| 免费在线欧美视频| 国产精品素人一区二区| 国产精品久久久久影院亚瑟| 91精品国产麻豆| 欧美人与禽zozo性伦| 欧美日韩一区二区三区高清| 91久久奴性调教|