空間索引是 SQL Server 2008 高效空間查詢的關鍵。本文深入解析空間索引的 B 樹架構、四層網格分解機制、Hilbert 曲線編號、稠密度 (Density) 配置、分割過程,並介紹空間參考系統表、WKT 格式與系統目錄視圖,助你理解並優化空間索引配置。
空間索引依據空間物件位置、形狀或拓撲關係組織資料結構,透過篩選排除無關物件,大幅加速空間查詢 (相交、距離、包含等)。SQL Server 將空間索引整合於資料庫引擎,查詢優化器可依成本模型自動決定是否使用。
系統視圖 sys.spatial_reference_systems 存儲所有 EPSG 標準參考系統。每列對應唯一 SRID,定義座標系統、基準面、橢球體、本初子午線、投影參數、單位等。
SELECT well_known_text
FROM sys.spatial_reference_systems
WHERE authorized_spatial_reference_id = 4326
AND authority_name = 'EPSG';
輸出 WKT (EPSG:4326 - WGS 84):
GEOGCS["WGS 84",
DATUM["World Geodetic System 1984",
ELLIPSOID["WGS 84", 6378137, 298.257223563]
],
PRIMEM["Greenwich", 0],
UNIT["Degree", 0.0174532925199433]
]

WKT 以文字描述座標參考系統組成:座標系統名稱、地理座標系統、基準面、橢球體參數、本初子午線、投影方法、投影參數、單位、軸順序、權威編碼 (EPSG)。
空間索引儲存於 sys.spatial_indexes,採用 B 樹將二維空間線性化。索引建立前,先將空間分解為四層網格階層:
每層將上層格網再細分,所有格網同層等大。預設 4x4 (16 格),四層共 65,536 個 Level 4 儲存格。


儲存格按 Hilbert 曲線線性編號,而非簡單行優先,以保持空間鄰近性在 B 樹中也鄰近。

每層可獨立設定格網數:低 (4x4=16)、中 (8x8=64)、高 (16x16=256)。預設全「中」。透過 sys.spatial_index_tessellations 視圖檢視各層設定 (level_1_grid 等)。
sys.spatial_indexes:空間索引中繼資料。sys.spatial_index_tessellations:各層格網稠密度設定。空間索引透過四層網格分解將二維空間映射至 B 樹,稠密度配置直接影響索引大小與查詢精度。理解分割過程與 Hilbert 曲線特性,有助於針對資料分佈 (如點密集 vs 面稀疏) 調整各層稠密度,達到索引大小與查詢效能的最佳平衡。