簡體   English   中英

Postgresql檢查表中是否存在vs唯一約束

[英]Postgresql check if exists vs unique constraint in table

正在從休眠狀態的Postgresql數據庫中插入大量包含電話號碼和狀態的記錄(一百萬)。 我正在從文件中讀取記錄,對其進行處理,然后一次插入一個。 但是在插入之前,我需要檢查表中是否已經存在電話號碼和狀態的組合。

在我看來,最快的方法是執行查詢並將其限制為1或“現有”查詢,但是我從同事那里得到的另一建議是在電話號碼和狀態字段的表上添加唯一約束,並且如果違反了唯一密鑰規則,只需在休眠狀態下捕獲異常。

關於什么是最快,最可靠的方法有什么想法?

這取決於是否只有這些列,或者是否還有其他列,例如日期。 如果您不在乎哪個記錄將保留在數據庫中(例如,您需要數字,狀態和日期的最新組合),則創建唯一的約束並從插入重復項時拋出的異常中恢復。

您也可以插入所有帶有重復項但帶有一些主鍵(id)的內容,然后刪除所有您想要擁有的重復項(group by ...),然后創建唯一約束。

最后一個選項取決於記錄的大小-如果記錄只有1M,則可以在應用程序層中過濾它們,然后保存。

所有這些都取決於有多少個重復項,如果很少,則使用選項一,如果每個記錄可能存在十次,也許最后一個選項是最好的(取決於RAM,但是您將僅保存當前電話和電話的最佳記錄)。狀態)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM