2013-03-01 18 views
0

正如在Tinyint vs Bit中所討論的那樣,如果我在表中有8位字段,它們將只採用一個tinyint的記錄大小。可記錄位字段在SQL記錄和SQL索引中佔用多少空間?

我認爲只有當它們被聲明爲not null時纔是正確的。

可空位字段呢?他們是否需要2位或整個tinyint?

索引怎麼樣?如果我在INCLUDED列表中使用與其他位或非位字段相結合的字段,可以使用多少空間進行索引內部的可空或不可空位字段?如果位在索引表達式中與其他位和非位字段一起使用,該怎麼辦?

+2

嗯,你可以試試看 - 使用* your * schema創建表格,一個使用null,另一個使用非null,使用* your *數據填充它們,並按比例查看像'sp_spaceused'之類的東西的區別。 – 2013-03-01 17:02:53

+1

我同意@AaronBertrand你不僅會通過這樣做來發現你的答案,而且會讓你瞭解你的假設。 – Zane 2013-03-01 17:04:41

回答

2

我不能說具體的SQL Server,(我不知道細節的時候發出砰的一聲)。但是,數據庫只需要每個可爲空的字段一位。如果數據庫佔用更多的空間,那是因爲有人希望獲得性能優勢,比如32位對齊整數。

典型RDBMS中的索引是b-樹。位字段的樹只是一個分支用於設置位,一個分支用於清除位。如果可以爲空,則是另一個分支。樹的結尾將是匹配該條件的記錄列表。