最佳化資料庫更新精靈中產生的SQL查詢
最後更新: 2024年7月16日
本文解決在Adobe Campaign中向現有結構描述新增整數欄位的問題,尤其是當記錄已存在時。 若要解決此問題,請透過將四個命令(如本文所述)縮合為一個來最佳化SQL查詢。 這應該能確保營運效率,避免出現效能問題或死結。
說明
環境
- Adobe Campaign
- Adobe Campaign Classic
問題/症狀
在大多數Adobe Campaign組建(包括Gold Standard 9032組建)中,將新欄新增至現有結構描述時,您可能會遇到多個問題。
本文的範圍是解決一個與以下相關的特定問題:
- 當記錄已存在時,將整數欄位新增到現有結構描述。
- 將應用程式產生的SQL查詢最佳化為Postgres SQL的有效查詢。
解決方法
新增整數資料行時,會產生類似以下的SQL敘述句:
ALTER TABLE NmsRecipient ADD <column_name> SMALLINT;
UPDATE NmsRecipient SET <column_name> = 0;
ALTER TABLE NmsRecipient ALTER COLUMN <column_name> SET Default 0;
ALTER TABLE NmsRecipient ALTER COLUMN i<column_name> SET NOT NULL;
這裡的問題是資料庫中有四個並行執行的命令,這可能會導致效能問題或死結。
解決方案是將這四個命令合併為一個,然後仍然進行如下所示的相同變更:
ALTER TABLE NmsRecipient ADD iFichierLiveDataCliqueurs SMALLINT NOT NULL SET Default 0 ;
它會執行所有必要的變更、新增欄、設定預設值、設定NOT NULL
,以及由於NOT NULL
限制將現有記錄的值設定為 0。
附註:
如果有多個整數欄需要新增,請逐一新增,然後針對每項變更執行資料庫精靈。
這是為了確保順暢的操作,因為陳述式也會將所有 現有的 記錄更新為 0,這可能需要一些時間,視記錄數量而定。
原因
例如,當您有現有的收件者表格或任何其他已有一百萬筆記錄以上的表格,就會發生這種情況。
如果您現在需要新增一額外欄至該表格,其資料型別為Integer。 在這種情況下,您會在綱要定義中新增該欄,並想在資料庫中確認變更。
更新資料庫時,資料庫會遇到死結,或查詢會封鎖其他作業。
這主要是因為根據資料庫精靈產生的SQL命令,將所有記錄更新為 0。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f