預讀:用估計信息,去硬碟讀取數據到緩存。預讀100次,也就是估計將要從硬碟中讀取了100頁數據到緩存。 物理讀:查詢計劃生成好以後,如果緩存缺少所需要的數據,讓緩存再次去讀硬碟。物理讀10頁,從硬碟中讀取10頁數據到緩存。 邏輯讀:從緩存中取出所有數據。邏輯讀100次,也就是從緩存里取到100頁數據 ...
- 預讀:用估計信息,去硬碟讀取數據到緩存。預讀100次,也就是估計將要從硬碟中讀取了100頁數據到緩存。
- 物理讀:查詢計劃生成好以後,如果緩存缺少所需要的數據,讓緩存再次去讀硬碟。物理讀10頁,從硬碟中讀取10頁數據到緩存。
- 邏輯讀:從緩存中取出所有數據。邏輯讀100次,也就是從緩存里取到100頁數據。
- lob邏輯讀:從緩存讀取的text,ntext,image或大值類型(varchar(max),nvarchar(max),varbinary(max))的頁的數目
SQL Server存儲的最小單位是頁,每一頁大小為8K,SQL Server對於頁的讀取是原子性的,要麼讀完一頁,要麼完全不讀。即使是僅僅要獲得一條數據,也要讀完一頁。而頁之間的數據組織結構為B樹結構。
所以SQL Server對於邏輯讀、預讀、物理讀的單位是頁。
基本上,邏輯讀、物理讀、預讀都等於是掃描了多少個頁。
當遇到一個查詢語句時,SQL SERVER會走第一步,分別為生成執行計劃(占用CPU和記憶體資源),同步的用估計的數據去磁碟中取得需要取的數據(占用IO資源,這就是預讀),
註意,兩個第一步是並行的,SQL SERVER通過這種方式來提高查詢性能.
然後查詢計劃生成好了以後去緩存讀取數據.當發現緩存缺少所需要的數據後讓緩存再次去讀硬碟(物理讀)
最後從緩存中取出所有數據(邏輯讀)。