全表掃描

標籤: 暫無標籤

9

更新時間: 2013-09-05

廣告

在資料庫中,對無索引的表進行查詢一般稱為全表掃描。全表掃描是資料庫伺服器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。

全表掃描 -定義:

  在資料庫中,對無索引的表進行查詢一般稱為全表掃描。全表掃描是資料庫伺服器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。

全表掃描 -全表掃描的成本

  全表掃描的成本 = 表的數據塊總數 / 多塊讀取


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

全表掃描 -全表掃描的穩定性

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

全表掃描 -何時適用全表掃描

  1.單表查詢


  ※ 表很小,索引可能就比表還大。


  ※ 訪問的數據佔全表數據的百分比很大,索引訪問的總成本大於全表掃描的成本。


  ※ 相對於索引來說,表中的數據排列過於凌亂,表現出來就是索引的 clustering_factor 很大,導致索引的訪問成本劇增。


  2.多表連接


  ※ hash join的時候,內層表和外層表都可以使用全表掃描(對於某個單獨的表的訪問是否適用全表掃描,這個又回到了單表查詢的情況)。


  ※ nest loop的時候,外層表可以使用全表掃描,內層表一般不用全表掃描。

廣告