直接检查列大小+ Alter表或Alter表

时间:2012-07-05 08:11:03

标签: performance tsql resize

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

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

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

统计上有大约4000个表格要检查,20列最多需要更正......

2 个答案:

答案 0 :(得分: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元数据将始终是最新的。为了使您更容易创建元数据视图,使其易于使用。但这是一个不同的问题。

答案 1 :(得分:0)

最后,我们在alter table之前实现了检查,在执行alter命令的情况下执行alter命令的百分比很低