sql-server - SQL Server 在一个表中打包多个位域
问题描述
我正在使用 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
)
解决方案
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 字节的表中都相同且相等。
推荐阅读
- javascript - 如何在第二次播放时停止 Safari 剪辑音频的时间片段
- javascript - 自定义交换在冒泡排序中失败
- jestjs - react-navigation:开玩笑地测试导航器内组件的标题后退按钮逻辑
- database - 将列表数据反射回 UI [Flutter]
- laravel - Laravel Livewire,如何在动态字段中应用 select2
- javascript - 使用带有反应窗口和粘性列的反应表
- python - 如何解决odoo上的错误time.clock()
- google-bigquery - 如何在 google bigquery 中创建表的克隆
- powershell - 将(字符串)变量设置为等于另一个(字符串)变量,包括修改
- character-encoding - LSTM 模型似乎没有从训练中学习