我使用的是 SQL Server 2016,但我认为这个问题应该适用于所有版本的 SQL Server ...

我知道如果表中有多个位字段,这些字段会被打包在一起以节省空间。 即使位字段不连续出现,SQL Server 也会打包它们吗?:-

create table test (
    field1 int,
    field2 bit,
    field3 varchar(100),
    field4 bit,
    field5 varchar(100),
    field6 bit
)

或者我是否需要将所有位字段放在一起,如下所示:-

create table test (
    field1 int,
    field3 varchar(100),
    field5 varchar(100),
    field2 bit,
    field4 bit,
    field6 bit
)

#1楼 票数:1 已采纳

TL; 博士; 无论位域的定义顺序如何,SQL Server 都会对其进行打包。

如果我们要运行以下

create table test_dispersed (
    field1 int,
    field2 bit,
    field3 varchar(100),
    field4 bit,
    field5 varchar(100),
    field6 bit
)

create table test_contiguous (
    field1 int,
    field3 varchar(100),
    field5 varchar(100),
    field2 bit,
    field4 bit,
    field6 bit
)

insert into test_dispersed (field1, field2, field3, field4, field5, field6) values (123,0,'A string',1,'Another string',0);
insert into test_contiguous (field1, field2, field3, field4, field5, field6) values (123,0,'A string',1,'Another string',0);


SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(N'YourDbName'), OBJECT_ID(N'[dbo].[test_dispersed]'), NULL, NULL , 'DETAILED')
SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(N'YourDbName'), OBJECT_ID(N'[dbo].[test_contiguous]'), NULL, NULL , 'DETAILED')

您将看到两个表的[max_record_size_in_bytes, min_record_size_in_bytes, avg_record_size_in_bytes]在 54 字节的表中都相同且相等。

  ask by andyabel translate from so

未解决问题?本站智能推荐:

1回复

在一个SQL文件中创建多个视图

我正在尝试创建一个安装脚本来一次安装多个视图。 我已经尝试了通过网络发现的几个建议,但没有成功。 该脚本将安装 6 个视图和一个索引。 在脚本顶部我尝试过的事情: 错误,因为“CREATE VIEW”必须是查询批处理中的第一条语句。 与其他一些变化。 寻找一种在一个 .sql 文件中创建多个 CRE
1回复

如何在SQL-Server中创建具有两列的唯一键

我有3张桌子: StudentDetails(StudentNumber INT {PK}, IndexNumber, FirstName, ...) SubjectDetails(SubjectNumber INT {PK}, SubjectCode, ...) 分数(MarkCode
2回复

如何在T-SQL的一个脚本中创建两个具有相同列定义的表?

我有两个脚本: 唯一的区别是表名。 如何用一个替换 2 个列定义? 因此,将来在重命名列或向一个表中添加新列时不会出错(表必须始终相同定义)?
1回复

SQL如何查找某个位是否在[重复]

该问题与以下内容完全相同: SQL检查位标志 2答案 为什么不起作用? 我只想确定从十进制到二进制的某个位是否打开/关闭。 我一定缺少一些非常基础的东西。
1回复

在RDB中设计一个表来销售多个项目,并计算销售价值

我正在为 Mock 应用程序设计数据库,但在概念化“销售”表的设计时遇到了问题。 假设我有一个以 ID 作为其 PK、名称和 lname 的 CASHIER 表以 ARTICLE_ID 为 PK、描述、价格、库存的 ARTICLE 表 SALES 表包含 SALE_ID(pk)、ARTICLE_ID
3回复

将具有不同列的多个表合并为一个表

我有 4 个表,每个表都包含不同的数据和不同的列(标题名称)。 我想创建一个新表,其中包含所有数据和所有列到一个新表中。 注意:我正在尝试将记录选择为单个结果。 任何表之间没有关系。 每个表都从其他地方收集数据。 我正在尝试将这些表合并为 1,以便我可以训练机器学习模型。 这有帮助吗? 如果您需要更
1回复

SQL:在索引中包含一个新列

我在表中的两行上有一个非聚集索引,其中包括许多列。 该索引由视图使用,并且该视图现在已更新为包含另一列。 我通常编写数据库更改脚本,以便他们首先测试更改是否已经应用,这显然意味着例如,如果重新运行脚本,列不会被意外添加多次。 我想通过删除并重新创建新列来将新列添加到索引中(除非有一种方法可以在不重新
2回复

在SQL中创建表,但未显示在“表”文件夹中

我目前正在尝试在SQL中创建表。 当我运行查询时,我收到文本“命令已成功完成”。 但是,这不会将表添加到左侧的表文件夹中。 据我所知,尽管Visual Studio告诉我它已创建,但尚未创建。 我已经多次刷新了文件夹和整个服务器。