SQLSERVER的表格存儲組織結構
msdn網址:
SQLSERVER的表格存儲組織結構可以用下面一張圖來解釋
平時我們說的SQLSERVER表分區技術,默認一個表的所有數據存放在一個分區,如果使用表分區,那么DBA可以決定要建多少
個分區,規划表的數據存放到哪一個分區。當然,創建了分區還不能實現減輕I/O負載,還要創建幾個文件組,創建多少個由DBA
決定,DBA還要決定把哪些分區放在哪個文件組,最后決定把哪些文件組放在哪些磁盤,要把文件組放在不同的磁盤才能真正實現
減輕I/O負載。當客戶端訪問某一部分數據的時候,如果數據放在A分區,A分區在A文件組,A文件組位於A磁盤,那么SQL就去A磁
盤讀數據,當客戶端要訪問某一部分數據放在B分區,B分區在B文件組,B文件組位於B磁盤,那么SQL就去B磁盤讀數據,從而減輕
單獨一個磁盤的I/O壓力。
最后說明一下表分區技術是SQL2005才有的,因為分區是從SQL2005才開始引入的!!
最最后說一下:只有數據文件才有文件組,日志文件是沒有文件組的,因為數據文件跟日志文件的存儲方式是不一樣的!!
2012-12-22補充:
有些人問 :在創建非聚集索引的時候為什么不加NONCLUSTERED關鍵字也可以,其實下面兩個語句都是一樣的
1 CREATE NONCLUSTERED INDEX SalesOrderDetail_test_NCL_Price ON [dbo].[SalesOrderDetail_test]([UnitPrice]) 2 GO 3 4 5 CREATE INDEX SalesOrderDetail_test_NCL_Price ON [dbo].[SalesOrderDetail_test]([UnitPrice]) 6 GO
其實在SQLSERVER里面只有兩種索引,聚集索引跟非聚集索引 如果你不加CLUSTERED關鍵字(聚集索引)一概都是非聚集索引
所以加不加“NONCLUSTERED”關鍵字也無所謂
因為數據的存儲地方只有兩個:“索引頁”跟“堆數據結構的堆頁”,如果建立了聚集索引那么數據會存儲在索引頁並按照建立了索引
的第一個字段的順序來排序,而沒有建立聚集索引的那么數據都原封不動,照常存儲在堆數據結構的數據頁面,只是非聚集索引有
指針指向這些頁面,使查找更快