如果所有查询都在一个事务中,我是否可以依靠SQL Server(和SQL Server Compact)一次对单个表执行多个ALTER TABLE
查询,而不是后续应用更改?
我正在从代码生成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。有关其他关系数据库引擎的信息也是有用的,以防万一。
答案 0 :(得分:1)
它们将在事务中顺序,对事务外的其他会话全有或全无。如果您担心性能,请考虑在表上执行DDL语句将在事务持续期间锁定整个表的事实,因此不要在实时高流量表上执行此操作。
答案 1 :(得分:1)
第二种情况原则上是优选的,因为它为优化者提供了开展业务的机会。特别是,数据字典很可能会被读取和写入一个,并且对表空间的所有更改也将一次完成。但我怀疑只是通过添加整数,就像在示例中一样,它会产生很大的不同。并且肯定是引擎特定的。