最佳化資料庫更新精靈中產生的SQL查詢

本文解決在Adobe Campaign中向現有結構描述新增整數欄位的問題,尤其是當記錄已存在時。 若要解決此問題,請透過將四個命令(如本文所述)縮合為一個來最佳化SQL查詢。 這應該能確保營運效率,避免出現效能問題或死結。

說明 description

環境

  • Adobe Campaign
  • Adobe Campaign Classic

問題/症狀

在大多數Adobe Campaign組建(包括Gold Standard 9032組建)中,將新欄新增至現有結構描述時,您可能會遇到多個問題。

本文的範圍是解決一個與以下相關的特定問題:

  • 當記錄已存在時,將整數欄位新增到現有結構描述。
  • 將應用程式產生的SQL查詢最佳化為Postgres SQL的有效查詢。

解決方法 resolution

新增整數資料行時,會產生類似以下的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