欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2022年10月02日 11:04:42   作者:波多爾斯基  
本文詳細(xì)講解了Postgresql刪除數(shù)據(jù)庫(kù)表中重復(fù)數(shù)據(jù)的幾種方法,文中通過示例代碼介紹的非常詳細(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,是通過程序生成的GUID,隨著數(shù)據(jù)表的越來(lái)越大(70w),即便我建立了索引,查詢效率依然不樂觀。

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

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

使用group by

數(shù)據(jù)量小的時(shí)候適用。對(duì)于我這個(gè)70w的數(shù)據(jù),查詢運(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";

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

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

使用ON CONFLICT

如果我們直接建立新表格,設(shè)置好新的主鍵,然后插入數(shù)據(jù),如果重復(fù)了就跳過不就行了?但是使用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解析URL的方法

    PostgreSQL解析URL的方法

    盡管PostgreSQL中支持大量的數(shù)據(jù)類型,但是對(duì)于URL似乎并沒有一個(gè)相應(yīng)的類型能夠去存儲(chǔ)。那么對(duì)于URL的數(shù)據(jù)我們?cè)跀?shù)據(jù)庫(kù)中要怎么去處理呢?今天通過本文給大家介紹下,需要的朋友參考下吧
    2021-07-07
  • postgresql 查詢集合結(jié)果用逗號(hào)分隔返回字符串處理的操作

    postgresql 查詢集合結(jié)果用逗號(hào)分隔返回字符串處理的操作

    這篇文章主要介紹了postgresql 查詢集合結(jié)果用逗號(hào)分隔返回字符串處理的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-02-02
  • PostgreSQL limit的神奇作用詳解

    PostgreSQL limit的神奇作用詳解

    這篇文章主要介紹了PostgreSQL limit的神奇作用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • pgsql的UUID生成函數(shù)實(shí)例

    pgsql的UUID生成函數(shù)實(shí)例

    這篇文章主要介紹了pgsql的UUID生成函數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-01-01
  • PostgresSql 多表關(guān)聯(lián)刪除語(yǔ)句的操作

    PostgresSql 多表關(guān)聯(lián)刪除語(yǔ)句的操作

    這篇文章主要介紹了PostgresSql 多表關(guān)聯(lián)刪除語(yǔ)句的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-01-01
  • PostgreSQL數(shù)據(jù)庫(kù)命令行執(zhí)行SQL腳本的三種方式

    PostgreSQL數(shù)據(jù)庫(kù)命令行執(zhí)行SQL腳本的三種方式

    生成環(huán)境中,出于安全性等原因,往往不提供數(shù)據(jù)庫(kù)連接工具,所以對(duì)數(shù)據(jù)庫(kù)的更新和升級(jí)就得通過命令行來(lái)實(shí)現(xiàn),本文總結(jié)了三種命令行執(zhí)行sql腳本的方式,需要的朋友可以參考下
    2024-02-02
  • PostgreSQL查看版本信息的操作

    PostgreSQL查看版本信息的操作

    這篇文章主要介紹了PostgreSQL查看版本信息的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-01-01
  • PostgreSQL 查看表的主外鍵等約束關(guān)系詳解

    PostgreSQL 查看表的主外鍵等約束關(guān)系詳解

    這篇文章主要介紹了PostgreSQL 查看表的主外鍵等約束關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-01-01
  • postgresql實(shí)現(xiàn)對(duì)已有數(shù)據(jù)表分區(qū)處理的操作詳解

    postgresql實(shí)現(xiàn)對(duì)已有數(shù)據(jù)表分區(qū)處理的操作詳解

    這篇文章主要為大家詳細(xì)介紹了postgresql實(shí)現(xiàn)對(duì)已有數(shù)據(jù)表分區(qū)處理的操作的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • PostgreSQL備份工具 pgBackRest使用詳解

    PostgreSQL備份工具 pgBackRest使用詳解

    這篇文章主要介紹了PostgreSQL備份工具 pgBackRest使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-02-02

最新評(píng)論