複製鏈接
請複製以下鏈接發送給好友

全表掃描

鎖定
在數據庫中,對無索引的表進行查詢一般稱為全表掃描。全表掃描是數據庫服務器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。
中文名
全表掃描
使用設備
數據庫服務器
成    本
表的數據塊總數 / 多塊讀取
穩定性
成本是衡定不變
適用情況
單表查詢,多表連接

全表掃描成本

全表掃描的成本 = 表的數據塊總數 / 多塊讀取
一般説來數據庫在進行全表掃描時進行的是多塊讀取,也就是説每次從buffer cache中讀取多塊,而不是一次一塊的讀。另外,全表掃描的成本中並不包括對數據進行過濾和計算的成本。也就是説全表掃描的成本僅僅是讀取數據的成本,而不包含對數據進行計算,過濾的CPU成本。

全表掃描穩定性

相對於索引範圍掃描來説,全表掃描的成本是衡定不變的。無論你的查詢是想訪問一筆數據還是訪問整個表的所有數據,全表掃描都會把整張表讀出來。而索引範圍掃描就不同,因為有了索引這個有序的數據結構做支持,可以只訪問需要的索引塊和需要的數據塊,而不是訪問整張表。

全表掃描適用範圍

1. 單表查詢
※ 表很小,索引可能就比表還大。
※ 訪問的數據佔全表數據的百分比很大,索引訪問的總成本大於全表掃描的成本。
※ 相對於索引來説,表中的數據排列過於凌亂,表現出來就是索引的 clustering_factor 很大,導致索引的訪問成本劇增。
2. 多表連接
※ hash join的時候,內層表和外層表都可以使用全表掃描(對於某個單獨的表的訪問是否適用全表掃描,這個又回到了單表查詢的情況)。
※ nest loop的時候,外層表可以使用全表掃描,內層表一般不用全表掃描。