在单个事务中的单个表上执行多个DDL查询
问题描述:
我可以依靠SQL Server(和SQL Server Compact)一次对单个表执行多个ALTER TABLE
查询,而不是在所有查询都在单一交易?在单个事务中的单个表上执行多个DDL查询
我从代码生成DML查询,并希望简化代码,但我宁愿避免性能问题。
例如,是否有差异,性能的角度来看,此代码之间:
BEGIN TRAN
ALTER TABLE t ADD COLUMN a int
ALTER TABLE t ADD COLUMN b int
ALTER TABLE t ADD COLUMN c int
COMMIT TRAN
和此代码:
BEGIN TRAN
ALTER TABLE t ADD COLUMN a int
, ADD COLUMN b int
, ADD COLUMN c int
COMMIT TRAN
P.S.以防万一,其他关系数据库引擎的信息也会很有用。
答
它们将在事务内按顺序进行,对于事务之外的其他会话全有或全无。如果您担心性能问题,请考虑这样一个事实,即在表上执行DDL语句会在整个交易过程中锁定整个表,因此请勿在实时高流量表上执行此操作。
答
第二种情况原则上更可取,因为它为优化程序提供了进行业务的机会。特别是,数据字典很可能会被读入和写入,并且表空间的所有更改也将一次完成。但我怀疑只是通过添加ints,就像例子中那样,它会产生很大的不同。肯定是特定于引擎的。
为问题添加示例代码,使其不太模糊。 – Athari 2013-04-04 16:01:50