首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2000 系統資料庫架構與索引原理解析

     編輯:關於SqlServer

四大系統資料庫核心職責

SQL Server 2000 安裝完成後會建立四個系統資料庫,它們是整個引擎運行的基石:

資料庫核心功能備份優先級備註
master 儲存所有伺服器層級資訊:登入帳號、密碼雜湊、連結伺服器、配置選項、所有使用者資料庫的建立資訊與檔案路徑 最高 損毀將導致整個 SQL Server 癱瘓,必須定期完整備份
model 新資料庫的範本。CREATE DATABASE 實際上是複製 model 然後擴展空白資料頁 中 修改 model 中的復原模式、預設排序規則、使用者定義型別會影響後續新建資料庫
tempdb 全域暫存資源:暫存表(#temp)、表變數、游標、工作表、版本存放區、線上索引建立暫存空間 無需備份 每次服務重啟重建;可預先調整大小/檔案數減少自動擴展爭用
msdb SQL Server Agent 作業、排程、警示、操作員、備份/還原歷史、複寫、記錄傳送、資料庫郵件 高 遺失 msdb 將導致所有 Agent 作業、歷史記錄消失

索引核心原理與效能優化

為什麼需要索引?

以 1,000 萬筆 Employee 表查詢「來自北京的員工」為例:

  • 無索引:全表掃描,依序讀取所有資料頁,CPU/IO 消耗極大
  • 有索引:B+ 樹結構,依索引鍵順序快速定位 → 書籤查找 → 取回資料列,IO 降低數個數量級

叢集 vs 非叢集索引

特性叢集索引非叢集索引
每張表數量 1 最多 249 (SQL 2000) / 999 (SQL 2005+)
資料儲存順序 葉層即資料列,依索引鍵物理排序 葉層含索引鍵 + 書籤 (RID 或叢集鍵)
範圍查詢效能 極佳(資料連續儲存) 需書籤查找,隨機 IO
插入/更新成本 較高(需維持物理順序) 較低(僅更新索引樹)
適用場景 範圍查詢、排序、主鍵、外鍵 點查詢、覆蓋索引、高選擇性條件

索引設計黃金法則

  1. 窄而定長:優先 INT、BIGINT、SMALLINT、TINYINT;避免 CHAR/VARCHAR、GUID 作叢集鍵
  2. 唯一且遞增:IDENTITY 整數最理想,減少分頁分裂
  3. 查詢驅動設計:分析 WHERE、JOIN、ORDER BY 欄位,建立覆蓋索引
  4. 避免過度索引:每個索引增加寫入成本與儲存空間;定期用 sys.dm_db_index_usage_stats 檢視未使用索引並移除
  5. 填充因子:高更新表設 FILLFACTOR = 70-80 預留空間

索引維護操作

-- 檢視碎片
DBCC SHOWCONTIG('TableName') WITH ALL_INDEXES;

-- 線上整理碎片 (SQL 2000 Enterprise)
DBCC INDEXDEFRAG(db_name, 'TableName', 'IndexName');

-- 離線重建 (鎖定表)
DBCC DBREINDEX('TableName', 'IndexName', 80);  -- 80% fillfactor

INDEXDEFRAG 線上操作、可中斷、每 5 分鐘回報進度;DBREINDEX 離線但能完全重建統計資料與頁面密度。

系統資料庫維護檢查清單

  • [ ] master:每日完整備份,異地保存
  • [ ] model:變更後備份,或納入每週完整備份
  • [ ] tempdb:預設配置多檔案(CPU 核心數 1:1,上限 8),固定大小、關閉自動增長
  • [ ] msdb:每日備份,清理舊備份歷史 sp_delete_backuphistory
  • [ ] 定期 DBCC CHECKDB 所有系統庫
  • [ ] 監控 tempdb 爭用(PAGELATCH_EX、SGAM 頁面)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved