您的位置:首頁(yè) > 軟件教程 > 教程 > PostgreSQL數(shù)據(jù)庫(kù)臨時(shí)表去重效率比較與優(yōu)化策略

PostgreSQL數(shù)據(jù)庫(kù)臨時(shí)表去重效率比較與優(yōu)化策略

來(lái)源:好特整理 | 時(shí)間:2024-08-17 10:05:31 | 閱讀:56 |  標(biāo)簽: T TG POS S 數(shù)據(jù)庫(kù) 策略   | 分享到:

使用的是PostgreSQL 在做大數(shù)據(jù)量(十萬(wàn)級(jí))導(dǎo)入時(shí),某些字段和數(shù)據(jù)庫(kù)表里數(shù)據(jù)(千萬(wàn)級(jí))重復(fù)的需要排除掉,把表數(shù)據(jù)查詢(xún)出來(lái)用程序的方式判斷去重效率很低,于是考慮用臨時(shí)表。 先把新數(shù)據(jù)插入到臨時(shí)表里,臨時(shí)表結(jié)構(gòu)和原始表一致。 用SQL的方式把不重復(fù)的數(shù)據(jù)DataA查詢(xún)出來(lái)。 把DataA插入到原

最近在處理大數(shù)據(jù)量(十萬(wàn)級(jí))導(dǎo)入時(shí),發(fā)現(xiàn)某些字段和數(shù)據(jù)庫(kù)表里的數(shù)據(jù)(千萬(wàn)級(jí))重復(fù),需要進(jìn)行去重處理。由于用程序方式查詢(xún)?nèi)ブ匦实拖拢虼丝紤]使用臨時(shí)表來(lái)優(yōu)化去重過(guò)程。

具體優(yōu)化步驟如下:

  1. 首先將新數(shù)據(jù)插入臨時(shí)表,其結(jié)構(gòu)與原始表相同。
  2. 通過(guò)SQL查詢(xún)不重復(fù)的數(shù)據(jù)DataA。
  3. 將DataA插入到原始表中。

鑒于不重復(fù)數(shù)據(jù)還需要進(jìn)一步處理,若無(wú)需特殊處理,可直接使用 insert into select 語(yǔ)句將第2步的數(shù)據(jù)插入原始表,并清空臨時(shí)表。

第2步有兩種方式,一種是使用 not exists 查詢(xún)方法,另一種是利用 left join 方式。

測(cè)試結(jié)果表明,當(dāng)臨時(shí)表數(shù)據(jù)量較少時(shí), not exists 方式耗時(shí)相對(duì)較短,但隨著數(shù)據(jù)量增加耗時(shí)逐漸增加。而 left join 方式在數(shù)據(jù)量較少時(shí)用時(shí)較長(zhǎng),但隨著數(shù)據(jù)量增加變化不大。因此,總結(jié)出單表去重時(shí),只要導(dǎo)入的數(shù)據(jù)量不是特別特別大(20w級(jí)以上),優(yōu)先使用 not exists 做去重。

然而,當(dāng)需要對(duì)兩個(gè)表進(jìn)行去重時(shí),情況會(huì)有所不同。在這種情況下,測(cè)試結(jié)果顯示對(duì)于數(shù)據(jù)量較少的臨時(shí)表, not exists 方式用時(shí)相對(duì)較短,但隨著數(shù)據(jù)量增加耗時(shí)急劇增加。而 left join 方式對(duì)于數(shù)據(jù)量較少時(shí)用時(shí)較長(zhǎng),但隨著數(shù)據(jù)量增加變化不大。因此,當(dāng)導(dǎo)入的數(shù)據(jù)在3w以下時(shí),建議使用 not exists ;在3w以上時(shí),建議使用 left join 。

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)