Sql-Server

使用比需要大得多的列大小

  • May 3, 2019

我正在與其他人一起創建 SQL Server 數據庫。其中一張表很小(6 行),其中的數據可能會保持不變。添加新行的可能性很小。該表如下所示:

CREATE TABLE someTable (
   id int primary key identity(1,1) not null,
   name varchar(128) not null unique
   );
INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here');

我正在查看該name列的 char 長度,我認為它的值可能永遠不會大於 32 個字元,甚至可能不會大於 24。我將此列更改為有什麼好處,例如,varchar(32)

此外,將預設列大小保持為 4、8、32 等的倍數有什麼好處?

SQL Server 在為查詢處理分配記憶體時使用列長度。所以,是的,簡而言之,您應該始終為數據適當地調整列的大小。

記憶體分配基於查詢返回的行數乘以聲明的列長度的一半。

話雖如此,在這種有 6 行的情況下,您可能不想過早地過度優化。除非您將此表加入到另一個具有數百萬行的表中,否則 varchar(24) 和 varchar(32) 甚至 varchar(128) 之間不會有很大的區別。

您的第二個問題詢問有關在二進制倍數上對齊列長度的問題。這根本不是必需的,因為 SQL Server 將所有數據儲存在 8KB 頁中,而不管每列的長度如何。

引用自:https://dba.stackexchange.com/questions/237128