AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 9268
Accepted
Martin Cifko Štefček
Martin Cifko Štefček
Asked: 2011-12-17 02:31:24 +0800 CST2011-12-17 02:31:24 +0800 CST 2011-12-17 02:31:24 +0800 CST

在 SQL Server 2008 中重新计算行大小?

  • 772

可以在 SQL Server 2008 中重新计算行大小吗?举个例子:

declare @counter int
declare @statement nvarchar(max)
set @counter=0
drop table kua2
create table kua2(id int)
while @counter<307
begin
    set @statement = N'alter table kua2 add id'+CAST(@counter as nvarchar(max))+N' nvarchar(max)'
    exec (@statement)
    set @statement = N'alter table kua2 drop column id'+CAST(@counter as nvarchar(max))
    exec (@statement)
    set @counter=@counter+1
end

alter index all on kua2 rebuild

dbcc cleantable (0,'kua2',0)

alter table kua2 add id0 int
alter table kua2 add id1 int
alter table kua2 add id2 int
alter table kua2 add id3 int

当我添加 id3 列时,我收到了关于 8060 字节的警告,但该表只有 5 个 int 列,它仍然计算行大小中删除的 nvarchar(max) 列。

唯一有帮助的是重新创建表。但出于几个原因,我不想这样做。有没有办法告诉 SQL Server 以某种方式重新计算行大小?

sql-server-2008 size
  • 3 3 个回答
  • 1312 Views

3 个回答

  • Voted
  1. Best Answer
    Paul White
    2011-12-17T10:29:57+08:002011-12-17T10:29:57+08:00

    这是 SQL Server 2012 RC0 中仍然存在的一个错误(尽管是一个相当小的错误)。在connect.microsoft.com报告它

    (感谢丹尼先生)。

    • 4
  2. Remus Rusanu
    2012-03-15T07:47:15+08:002012-03-15T07:47:15+08:00

    您只是在重建索引。你应该重建表:

    alter table kua2 rebuild
    

    如果没有这个,你的表有 307 个 varchar(max) 列,如果所有列都有内容,这意味着 7368 字节。+616 可变长度数组。+38 字节空位图中。添加到您的 5 个固定大小的 int 列,您的记录大小超过 8060。这几乎是预期的行为,这不是错误。请参阅幕后的 SQL Server 列。

    • 4
  3. MikeB
    2012-03-15T05:09:55+08:002012-03-15T05:09:55+08:00

    您在 KUA2 表上执行“ALTER INDEX ALL REBUILD”,但它首先没有索引。您无法重建堆。

    如果创建临时聚簇索引:

    CREATE CLUSTERED INDEX TempIndex ON Kua2(ID);
    

    您将强制重组表存储,包括打包元数据。如果您不需要聚簇索引(这很奇怪——您为什么要堆?)那么您可以删除它:

    DROP INDEX Kua2.TempIndex;
    

    不管你是否放弃它,你都可以添加更多的列而不用担心行大小限制,你也会享受更好的存储效率。

    alter table kua2 add id4 int
    
    • 1

相关问题

  • 连接不同地理区域的数据库的最佳实践

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve