「表掃描」是效能殺手。本文從執行計畫現象切入,透過 DBCC IND 定位資料頁、DBCC PAGE 剖析頁面內部結構(頁首、資料區、槽位陣列),揭示表掃描**逐槽位掃描**的物理機制。
CREATE TABLE Person (ID INT, Name CHAR(100));
INSERT INTO Person VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Cindy');
SELECT * FROM Person WHERE Name = 'Bob'; -- 無索引,Table Scan

啟用追蹤旗標 2588 觀察 DBCC IND 參數提示。

執行 DBCC IND('db', 'Person', -1):

PageFID:PagePID = 1:78 為資料頁(IAMFID=NULL 表示自身非 IAM)PageType=1 資料頁、IndexLevel=0 葉層
啟用 DBCC TRACEON(3604) 輸出至用戶端。

m_slotCnt = 3:3 個槽位m_freeCnt = ...:可用空間

m_slotCnt。
3. **迴圈 i = 0 到 m_slotCnt-1**:
**本質:表掃描 = 掃描每頁的槽位陣列,依位移量隨機存取資料區。**
表掃描在物理層面即「逐頁讀取槽位陣列、依位移量取資料列」。DBCC IND 找頁、DBCC PAGE 看槽位,是理解並消除表掃描的基礎工具組合。