SQL Server中資料的儲存

2022-05-14 19:01:34 字數 2248 閱讀 4825

參考**: 

檔案說明

主要主要資料檔案包含資料庫的啟動資訊,並指向資料庫中的其他檔案。

使用者資料和物件可儲存在此檔案中,也可以儲存在次要資料檔案中。

每個資料庫有乙個主要資料檔案。主要資料檔案的建議副檔名是 .mdf。

次要次要資料檔案是可選的,由使用者定義並儲存使用者資料。

通過將每個檔案放在不同的磁碟驅動器上,次要檔案可用於將資料分散到多個磁碟上。

另外,如果資料庫超過了單個 windows 檔案的最大大小,可以使用次要資料檔案,這樣資料庫就能繼續增長。

次要資料檔案的建議副檔名是  .ndf。

事務日誌

事務日誌檔案儲存用於恢復資料庫的日誌資訊。

每個資料庫必須至少有乙個日誌檔案。

事務日誌的建議副檔名是 .ldf。

檔案組是乙個邏輯概念,乙個資料庫可以包含乙個或多個檔案組,乙個檔案組可以包含乙個或多個物理資料庫檔案,這就是我們在建立資料庫的時候預設的情形。

資料庫檔案組如下圖所示:

那有人會問,為什麼要有檔案組的概念呢,檔案組的作用是什麼?通常情況下,有兩種情形可以使用檔案組:

1.在大型的應用程式中,資料庫中儲存的資料量也會很大,可能達到幾十幾百gb,甚至達到數tb,那在這種情況下,用單個資料庫檔案儲存資料,就會出現如索引慢等問題,效能出現瓶頸。

這時使用檔案組就能比較好的解決這個問題,因為檔案組中的某個表,其中的資料會分布在這個檔案組所有物理檔案中,因此,如果將檔案組包含的檔案建在不同的磁碟下,那麼對乙個表的查詢將會分散到多個磁碟上,這樣就提高了查詢效率。

2 . 在某些場景中,需要對業務進行劃分,每一塊業務相對獨立,這個時候可以使用檔案組將資料庫中的各個業務的資料分開,這時,只需要將各自業務下的表和物件建立在該業務對應的檔案組裡即可。

檔案組中的檔案可能分布在各個資料夾下,但是這些檔案是乙個邏輯整體,檔案組中的任何檔案都缺一不可,因此如果將檔案組中的檔案做遷移的時候要注意,不要將某個檔案遺漏,否則資料庫將無法執行。另外說一點就是檔案組裡面可以包含主資料庫檔案,次資料庫檔案,但是不能包含日誌檔案。

區段是用來為表和給定檔案中的索引分配空間的基本儲存單元。它由8個連續的大小為64kb的資料頁組成,即大小為512kb。

關於區段的要點包括:

1) 一旦乙個區段已滿,那麼下一條記錄將占用乙個完整的新區段大小,而不是記錄本身的大小。我們可以理解為sql server每次分配的空間是乙個區段的大小。

2)  通過預先分配空間,sql server省下了為每一條記錄分配新空間的時間。

僅僅因為要新增的行比現在分配的區段所能容納的行多了一行,就要另外占用整個區段,這似乎是一種浪費。但是,這種方式浪費的空間總量通常並不會那麼多,只佔了資料庫空間很小的比例,但是在高碎片化的環境中,這種浪費可能就比較多了。

占用整個區段空間的好處是sql server省去了一些分配空間的時間上的開銷。sql server不必每寫入一行就考慮分配問題,而是在需要新的區段時才處理額外空間的分配。

與區段是資料庫中的分配單元類似,頁是區段的分配單元。每乙個區段包含8個頁,每個頁的大小為8kb。

頁是到達真正的資料行的最後乙個級別。儘管每個區段中頁的數量是固定的,但是頁中的行數是不固定的,這個取決於行的大小,是可變的。可以把頁想成是表和索引行資料的某種容器。

資料行是不允許跨頁的。頁的結構如下圖所示:

上圖展示了資料是如何存放在頁中的。對於插入的每一行,為了表明特定行的資料開始於頁中的何處,每一頁的末尾都用一小塊空間記錄的每一行相對於頁頭位置的偏移量。

sql server中的頁有很多種型別,如索引頁,資料頁等,這裡只是一提,不做具體討論。

當頁滿時,會對其做拆分。在拆分頁時,會建立乙個新頁,並將已滿的頁上大約一半的資料移動到新頁上儲存。但是這也有例外,那就是使用聚集索引的時候。當在表上建立了聚集索引,而且下乙個插入的行物理上位於表的最後一行時,那麼將建立乙個新頁並把新的行新增到新的頁上,不會把已滿的行上一半的資料移動到新頁上面。

行是資料儲存的單位,在sql server中,行的大小限制在8kb(8060個字元,此時,頁上只有1條記錄),行中最大的列數限制在1024列。在資料頁上,列最大的限制是8kb(此時的記錄是1行1列,並且頁上面只有1條記錄),這應該就是sql server中varchar型別資料最大只能是8000的緣故吧。

SQL Server 中的儲存過程

一 初步了解儲存過程的使用 建立乙個簡單的儲存過程 1 create proc spemployee2as 3select from humanresources.employee 執行這個儲存過程 exec spemployee 刪除儲存過程 1 刪除儲存過程 2drop proc spemplo...

SQLSERVER資料儲存內幕

sqlserver 資料庫中資料如何儲存是sqlserver資料庫核心的知識,同時網路上相關的參考資料也比較少 近段時間通過學習相關知識,將自己對sqlserver資料庫在資料儲存方面的理解整理下來,一方面希望能加深自己的印象,另一方面也希望能給其他的朋友提供相關的參考 一 儲存檔案型別 sqlse...

sql server中的儲存過程除錯

除錯 在sql query中 物件瀏覽器 儲存過程 選擇要除錯的儲存過程 右擊 選擇除錯 debug 輸入引數 設定完你的引數值後 點選執行,就是出現乙個浮動工具條,上面有單步執行,斷點設定等 跟蹤 開始 程式 ms sqlserver 事件探查器 sql profiler 檔案 新建 跟蹤就可以了...