Я продовжую читати на багатьох форумах і в багатьох блогах, що сторінка складається, як показано нижче: Розмір сторінки: 16 x 512B = 8192B Заголовок сторінки: = 96B Максимальна кількість рядків: = 8060B
Це залишає (8192 - 96 - 8060) B = 36B.
Гаразд, це логічно і правильно. У мене таке питання: чому так багато людей кажуть, що решта 36B зарезервована для ігрового масиву?
Очевидно, що масив слотів дає 2B на рядок на сторінці; Таким чином, він може бути розміром до 2B і розміром до 1472B:
2B: 1 ряд * 2B = 2B
1472B: 8096B = n * 9B (хв. Розмір рядка з накладними ... подумайте, один стовпець TINYINT) + n * 2B (вартість масиву слотів за рядок) => 8096 = 11n => n = 8096/11 = 736.
736 * 2В = 1472В.
Це отримає мені до 20 через тег версії 14B.
USE master ;
GO
CREATE DATABASE test ;
GO
USE test ;
GO
ALTER DATABASE test
SET ALLOW_SNAPSHOT_ISOLATION ON ;
GO
ALTER DATABASE test
SET READ_COMMITTED_SNAPSHOT ON ;
GO
DROP TABLE tbl ;
GO
CREATE TABLE tbl
(
i CHAR(8000) DEFAULT(REPLICATE('a',8000))
, j CHAR(53) DEFAULT(REPLICATE('a',53))
) ;
INSERT INTO tbl
DEFAULT VALUES ;
GO
DBCC IND (test,tbl,-1) ;
GO
DBCC TRACEON(3604) ;
GO
DBCC PAGE(test,1,272,3) ;
GO
Ще один приклад. Якщо ви перейдете до 50 з 49, то ви отримаєте ВАРХАР (МАКС), який переходить до LOB_DATA.
DROP TABLE tbl ;
GO
CREATE TABLE tbl
(
i VARCHAR(MAX) DEFAULT(REPLICATE('a',8000))
, j CHAR(49) DEFAULT(REPLICATE('a',49))
) ;
sp_tableoption N'tbl', 'large value types out of row', 'OFF' ;
GO
INSERT INTO tbl
DEFAULT VALUES ;
GO
DBCC IND (test,tbl,-1) ;
GO
DBCC TRACEON(3604) ;
GO
DBCC PAGE(test,1,272,3) ;
GO
Схоже, ця проблема залишається навіть у SQL Server 2012. @SQLKiwi вказує на цю публікацію Кімберлі Трипп - http://www.sqlskills.com/blogs/kimberly/a-simple-start-table-creation-best-practices / .