优化在数据库更新向导中生成的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,这可能需要一些时间,具体取决于记录数量。
原因
例如,如果您有一个现有的收件人表或任何其他已拥有超过100万条记录的表,就会发生这种情况。
如果您现在需要向该表中添加一列(数据类型为Integer)。 在这种情况下,您可以在模式定义中添加该列,并希望在数据库中提交更改。
更新数据库时,数据库遇到死锁,或查询阻塞其他操作。
这主要是由于根据数据库向导生成的SQL命令将所有记录更新为 0。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f