SQL全表扫描
在看有關SQL優化的資料時,常會看到一個詞叫 全表掃描。下面來看一下什么是全表掃描。
全表掃描
在數據庫中,對無索引的表進行查詢一般稱為全表掃描。
全表掃描是數據庫服務器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。
全表掃描是從表中讀取所有行,然后過濾掉不符合選擇條件的行。
全表掃描的成本 = 表的數據塊總數 / 多塊讀取
相對于索引范圍掃描來說,全表掃描的成本是衡定不變的。無論查詢是想訪問一筆數據還是訪問整個表的所有數據,全表掃描都會把整張表讀出來。
索引范圍掃描不同,因為有了索引這個有序的數據結構做支持,可以只訪問需要的索引塊和需要的數據塊,而不是訪問整張表。
何時適用全表掃描
1. 單表查詢
? ? 表很小,索引可能就比表還大。
? ? 訪問的數據占全表數據的百分比很大,索引訪問的總成本大于全表掃描的成本。
? ? 相對于索引來說,表中的數據排列過于凌亂,表現出來就是索引的 clustering_factor 很大,導致索引的訪問成本劇增。
2. 多表連接
? ? hash join的時候,內層表和外層表都可以使用全表掃描。
? ? nest loop的時候,外層表可以使用全表掃描,內層表一般不用全表掃描。
?
一般對大表進行全表掃描,容易引起SQL查詢效率低。
索引范圍掃描在SQL執行計劃里標為 INDEX RANGE SCAN。
總結
- 上一篇: Win32汇编获取和设置文本框的内容
- 下一篇: SQL Server 替换一个字段的特定