0

我们有一个进程,它获取表列的列表和每个应该具有的大小(varchar 类型)并修改它们以确保它具有定义的大小。

在实际实现中我们直接对列表中的每一列执行一个alter table...

如果我们首先检查列大小是否与正确的大小不同,然后才执行更改表,它会运行得更快吗?

据统计,有 4000 左右的表列需要检查,最多 20 列需要更正......

4

2 回答 2

2

编辑:反映评论:

哪个更快取决于修改列的操作成本以及表中需要更改的列的数量。例如,更改一列空值并不是很昂贵。但是,如果您有很多数据,并且表中有很多列,则最好将表复制到新表中。根据您的数据库的指标来决定这一点,并不总是有正确和错误的答案。

您可能会创建一些动态 sql 来创建更改不正确大小的列的长度的 sql。这一定是最快的方法。

就像是:

SELECT  
     'some decision logic...' -- substitute values as needed 
FROM 
       INFORMATION_SCHEMA.COLUMNS
WHERE 
        ISNULL(CHARACTER_MAXIMUM_LENGTH, 5) <> 5 
    AND DATA_TYPE = 'NVARCHAR'

您可以添加要考虑的指标、表大小、数据大小列数(分组依据)等。

Sql Server 已经存储了所有这些元数据,您可以查询它。在自定义表中复制此信息并在其上运行光标似乎是错误的。我认为您提到的问题是复制此信息可能会导致数据过时,而 sql server 元数据将始终是最新的。为了更容易,您可以创建元数据视图以使其易于使用。但这是一个不同的问题。

于 2012-07-05T08:18:05.383 回答
0

最后,我们在 alter table 之前实施了检查,在需要执行 alter 命令的情况下,进程运行速度明显更快

于 2012-07-05T10:16:04.713 回答