最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Postgresql刪除數(shù)據(jù)庫(kù)表中重復(fù)數(shù)據(jù)的幾種方法詳解

 更新時(shí)間:2022年10月02日 11:04:42   作者:波多爾斯基  
本文詳細(xì)講解了Postgresql刪除數(shù)據(jù)庫(kù)表中重復(fù)數(shù)據(jù)的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一直使用Postgresql數(shù)據(jù)庫(kù),有一張表是這樣的:

DROP TABLE IF EXISTS "public"."devicedata";
CREATE TABLE "public"."devicedata" (
  "Id" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,
  "DeviceId" varchar(200) COLLATE "pg_catalog"."default",
  "Timestamp" int8,
  "DataArray" float4[]
)

CREATE INDEX "timeIndex" ON "public"."devicedata" USING btree (
  "Timestamp" "pg_catalog"."int8_ops" DESC NULLS LAST,
  "DeviceId" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);

ALTER TABLE "public"."devicedata" ADD CONSTRAINT "devicedata_pkey" PRIMARY KEY ("Id");

主鍵為Id,是通過(guò)程序生成的GUID,隨著數(shù)據(jù)表的越來(lái)越大(70w),即便我建立了索引,查詢(xún)效率依然不樂(lè)觀。

使用GUID作為數(shù)據(jù)庫(kù)的主鍵對(duì)分布式應(yīng)用比較友好,但是不利于數(shù)據(jù)的插入,可以使用類(lèi)似ABP的方法生成連續(xù)的GUID解決這個(gè)問(wèn)題。

為了進(jìn)行優(yōu)化,計(jì)劃使用DeviceId與Timestamp作為主鍵,由于主鍵會(huì)自動(dòng)建立索引,使用這兩個(gè)字段查詢(xún)的時(shí)候,查詢(xún)效率可以有很大的提升。不過(guò),由于數(shù)據(jù)庫(kù)的插入了很多的重復(fù)數(shù)據(jù),直接切換主鍵不可行,需要先剔除重復(fù)數(shù)據(jù)。

使用group by

數(shù)據(jù)量小的時(shí)候適用。對(duì)于我這個(gè)70w的數(shù)據(jù),查詢(xún)運(yùn)行了半個(gè)多小時(shí)也無(wú)法完成。

DELETE FROM "DeviceData"
WHERE "Id"
NOT IN (
SELECT max("Id")
FROM "DeviceData_temp"
GROUP BY "DeviceId", "Timestamp"
);

使用DISTINCT

建立一張新表然后插入數(shù)據(jù),或者使用select into語(yǔ)句。

SELECT DISTINCT "Timestamp", "DeviceId"
INTO "DeviceData_temp"
FROM "DeviceData";
-- 刪除原表
DROP TABLE "DeviceData";
-- 將新表重命名
ALTER TABLE "DeviceData_temp" RENAME TO "DeviceData";

不過(guò)這個(gè)問(wèn)題也非常大,很明顯,未來(lái)的表,是不需要Id列的,但是DataArray也沒(méi)有了,沒(méi)有意義。

如果SELECT DISTINCT "Timestamp", "DeviceId", "DataArray",那么可能出現(xiàn)"Timestamp", "DeviceId"重復(fù)的現(xiàn)象。

使用ON CONFLICT

如果我們直接建立新表格,設(shè)置好新的主鍵,然后插入數(shù)據(jù),如果重復(fù)了就跳過(guò)不就行了?但是使用select into是不行了,重復(fù)的數(shù)據(jù)會(huì)導(dǎo)致語(yǔ)句執(zhí)行中斷。需要借助upsert(on conflict)方法。

INSERT INTO "DeviceData_temp"
SELECT * FROM "DeviceData"
on conflict("DeviceId", "Timestamp") DO NOTHING;
-- 刪除原表
DROP TABLE "DeviceData";
-- 將新表重命名
ALTER TABLE "DeviceData_temp" RENAME TO "DeviceData";

執(zhí)行不到100s就完成了,刪除了許多重復(fù)數(shù)據(jù)。

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • PostgreSQL查看帶有綁定變量SQL的通用方法詳解

    PostgreSQL查看帶有綁定變量SQL的通用方法詳解

    今天我們要探討的是 custom執(zhí)行計(jì)劃和通用執(zhí)行計(jì)劃。這一技術(shù)在 Oracle中被稱(chēng)為綁定變量窺視。但 Postgresql中并沒(méi)有這樣的定義,更嚴(yán)格地說(shuō),Postgresql叫做custom執(zhí)行計(jì)劃和通用執(zhí)行計(jì)劃
    2022-09-09
  • 對(duì)postgresql日期和時(shí)間的比較

    對(duì)postgresql日期和時(shí)間的比較

    文章介紹了在數(shù)據(jù)庫(kù)中處理日期和時(shí)間類(lèi)型時(shí)的一些注意事項(xiàng),包括如何將字符串轉(zhuǎn)換為日期或時(shí)間類(lèi)型,以及在比較時(shí)自動(dòng)轉(zhuǎn)換的情況,作者建議在使用數(shù)據(jù)庫(kù)時(shí),根據(jù)具體情況進(jìn)行適當(dāng)?shù)念?lèi)型轉(zhuǎn)換,以避免潛在的錯(cuò)誤
    2025-01-01
  • 快速解決PostgreSQL中的Permission denied問(wèn)題

    快速解決PostgreSQL中的Permission denied問(wèn)題

    這篇文章主要介紹了快速解決PostgreSQL中的Permission denied問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL中的collations用法詳解

    PostgreSQL中的collations用法詳解

    這篇文章主要介紹了PostgreSQL中的collations用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Postgresql數(shù)據(jù)庫(kù)SQL字段拼接方法

    Postgresql數(shù)據(jù)庫(kù)SQL字段拼接方法

    Postgresql里面內(nèi)置了很多的實(shí)用函數(shù),下面這篇文章主要給大家介紹了關(guān)于Postgresql數(shù)據(jù)庫(kù)SQL字段拼接方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟

    Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟

    這篇文章主要介紹了Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟,包括啟動(dòng)PostgreSQL容器、獲取容器的IP地址、啟動(dòng)一個(gè)新的CentOS容器、在CentOS容器中安裝PostgreSQL客戶(hù)端、通過(guò)psql客戶(hù)端連接到PostgreSQL容器和在PostgreSQL中執(zhí)行SQL操作等內(nèi)容,需要的朋友可以參考下
    2024-10-10
  • PostgreSQL長(zhǎng)事務(wù)概念解析

    PostgreSQL長(zhǎng)事務(wù)概念解析

    pg中的長(zhǎng)事務(wù)會(huì)影響表中垃圾回收,導(dǎo)致表的年齡增長(zhǎng)無(wú)法freeze。能消耗事務(wù)的只有當(dāng)執(zhí)行了一些DML或者DDL操作后才能算是我們通常說(shuō)的長(zhǎng)事務(wù)。否則只能算是我們常說(shuō)的長(zhǎng)連接,當(dāng)然長(zhǎng)連接也有很多弊端,例如占用內(nèi)存、cpu等資源
    2022-09-09
  • postgresql數(shù)據(jù)庫(kù)根據(jù)年月查詢(xún)出本月的所有數(shù)據(jù)操作

    postgresql數(shù)據(jù)庫(kù)根據(jù)年月查詢(xún)出本月的所有數(shù)據(jù)操作

    這篇文章主要介紹了postgresql數(shù)據(jù)庫(kù)根據(jù)年月查詢(xún)出本月的所有數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Postgresql 查詢(xún)表引用或被引用的外鍵操作

    Postgresql 查詢(xún)表引用或被引用的外鍵操作

    這篇文章主要介紹了Postgresql 查詢(xún)表引用或被引用的外鍵操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Postgresql數(shù)據(jù)庫(kù)密碼忘記的詳細(xì)解決方法

    Postgresql數(shù)據(jù)庫(kù)密碼忘記的詳細(xì)解決方法

    在使用PostgreSQL數(shù)據(jù)庫(kù)時(shí),忘記數(shù)據(jù)庫(kù)密碼可能會(huì)影響到正常的開(kāi)發(fā)和維護(hù)工作,這篇文章主要介紹了Postgresql數(shù)據(jù)庫(kù)密碼忘記的詳細(xì)解決方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-06-06

最新評(píng)論

北流市| 池州市| 电白县| 蒙自县| 洪江市| 舞钢市| 日土县| 海林市| 阿瓦提县| 利辛县| 泾阳县| 大足县| 新河县| 社会| 墨脱县| 孟村| 绥阳县| 湾仔区| 名山县| 武川县| 罗山县| 苗栗县| 蒲江县| 百色市| 临高县| 湟源县| 天长市| 盐边县| 福海县| 饶河县| 抚顺县| 阳东县| 竹北市| 扎赉特旗| 汝南县| 马关县| 四会市| 武宁县| 金平| 廊坊市| 澳门|