SQLSERVER的表格存儲組織結構


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”關鍵字也無所謂

因為數據的存儲地方只有兩個:“索引頁”跟“堆數據結構的堆頁”,如果建立了聚集索引那么數據會存儲在索引頁並按照建立了索引

的第一個字段的順序來排序,而沒有建立聚集索引的那么數據都原封不動,照常存儲在堆數據結構的數據頁面,只是非聚集索引有

指針指向這些頁面,使查找更快


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM