SqlServer查詢優化檢視引數

2021-05-27 00:43:27 字數 2625 閱讀 7656

sqlserver查詢優化檢視引數

1. set ststistics time on --結果cpu time & elapsed time,即cpu時間&占用時間

解釋:表示執行這次查詢使用了多少cpu執行時間和執行查詢使用了多少時間。cpu執行時間是對執行查詢所需要的cpu資源的一種相對穩定的測量方法,與cpu的忙閒程度沒有關係。但是,每次執行查詢時這一數字也會有所不同,只是變化的範圍沒有總時間變化大。總時間是對查詢執行所需要的時間(不計算阻塞或讀資料的時間),由於伺服器上的負載是在不斷變化的,因此這一資料的變化範圍有時會相當地大。(由於cpu占用時間是相對穩定的,因此可以使用這一資料作為衡量你的調節措施是提高了查詢效能還是降低了查詢的效能的一種方法。)

2. 如(表:order details,掃瞄計數1,邏輯讀取10 次,物理讀取1 次,預讀9次)---set statistics io on

解釋:scan count:在查詢中涉及到的表被訪問的次數。在我們的例子中,其中的表只被訪問了1次,由於查詢中不包括連線命令,這一資訊並不是十分有用,但如果查詢中包含有乙個或多個連線,則這一資訊是十分有用的。(一 個迴圈外部的表的scan count值為1,但對於乙個迴圈內的表而言,其值為迴圈的次數。可以想象得到,對於乙個迴圈內的表而言,其scan count值越小,它所使用的資源越少,查詢的效能也就越高。因此在調節乙個帶連線的查詢的效能時,需要關注scan count的值,在進行調節時,注意觀察它是增加還是減少了。)

logical reads:這是set statistics io或set statistics time命令提供的最有用的 資料。我們知道,sql server在可以對任何資料進行操作前,必須首先把資料讀取到其資料緩衝區中。此外,我們也知道sql server何時會從資料緩衝區中讀取資料,並把資料讀取到大小為8k位元組的頁中。那麼logical reads的意義是什麼呢?logical reads是指sql server為得到查詢中的結果而必須從資料緩衝區讀取的頁數。在執行查詢時,sql server不會讀取比實際需求多或少的資料,因此,當在相同的資料集上執行同乙個查詢,得到的logical reads的數字總是相同的。(sql server執行查詢時的logical reads值每一次這個數值是不會變化的。因此,在進行查詢效能的調節時,這是乙個可以用來衡量你的調節措施是否成功的乙個很好的標準。如果 logical reads值下降,就表明查詢使用的伺服器資源減少,查詢的效能有所提高。如果logical reads值增加,則表示調節措施降低了查詢的效能。在其他條件不變的情況下,乙個查詢使用的邏輯讀越少,其效率就越高,查詢的速度就越快。)

physical reads:物理讀,在執行真正的查詢操作前,sql server必須從磁碟上向資料緩衝區中讀取它所需要的資料。在sql server開始執行查詢前,它要作的第一件事就是檢查它所需要的資料是否在資料緩衝區中,如果在,就從中讀取,如果不在,sql server必須首先將它需要的資料從磁碟上讀到資料緩衝區中。我們可以想象得到,sql server在執行物理讀時比執行邏輯讀需要更多的伺服器資源。因此,在理想情況下,我們應當盡量避免物理讀操作。下面的這一部分聽起來讓人容易感到糊塗 了。在對查詢的效能進行調節時,可以忽略物理讀而只專注於邏輯讀。你一定會納悶兒,剛才不是還說物理讀比邏輯讀需要更多的伺服器資源嗎?情況確實是這樣, sql server在執行查詢時所需要的物理讀次數不可能通過效能調節而減少的。減少物理讀的次數是dba的一項重要工作,但它涉及到整個伺服器效能的調節,而不僅僅是查詢效能的調節。在進行查詢效能調節時,我們不能控制資料緩衝區的大小或伺服器的忙碌程度以及完成查詢所需要的資料是在資料緩衝區中還是在磁碟 上,唯一我們能夠控制的資料是得到查詢結果所需要執行的邏輯讀的次數。因此,在查詢效能的調節中,我們可以心安理得地不理會set statistics io命令提供的physical read的值。(減少物理讀次數、加快sql server執行速度的一種方式是確保伺服器的物理記憶體足夠多。)

read-ahead reads:與physical reads一樣,這個值在查詢效能調節中也沒有什麼用。read-ahead reads表示sql server在執行預讀機制時讀取的物理頁。為了優化其效能,sql server在認為它需要資料之前預先讀取一部分資料,根據sql server對資料需求**的準確程度,預讀的資料頁可能有用,也可能沒用。在本例中,read-ahead reads的值為9,physical read的值為1,而logical reads的值為10,它們之間存在著簡單的相加關係。

那麼我在伺服器上執行查詢時的過程是怎麼樣的呢?首先,sql server會開始檢查完成查詢所需要的資料是否在資料緩衝區中,它會很快地發現這些資料不在資料緩衝區中,並啟動預讀機制將它所需要的10個資料頁中的 前9個讀取到資料緩衝區。當sql server檢查是否所需要的全部資料都已經在資料緩衝區時,會發現已經有9個資料頁在資料緩衝區中,還有乙個不在,它就會立即再次讀取磁碟,將所需要的頁讀到資料緩衝區。一旦所有的資料都在資料緩衝區後,sql server就可以處理查詢了。

總結:cpu時間,關注scan count(計數)以及logical read( 邏輯讀)次數

sql server查詢優化

0 在可以使用and的情況下,盡量不要使用between。1 在可以使用and的情況下,盡量不要使用or。or需要check所有列出的情況。2 在可以使用exists的情況下,避免使用in。exists走index,in不走索引。3 where條件中,如果使用了索引列,盡量不要對該列使用函式,會破壞...

sql server 資料查詢優化

前幾周做專案遇到問題與大家分享 因讀取資料關聯n個表,我大部份都採用子查詢 in 當時資料量在10000記錄級內,而且在本地伺服器執行速度都比較快。當再一次匯入幾w條記錄後多表關聯 in 就宕機。然後瘋狂網上搜解決方案。查詢速度慢的原因很多,常見如下幾種 1 沒有索引或者沒有用到索引 2 i o吞吐...

SQL Server查詢優化方案概括

下面暫從硬體 sql優化 sql server軟體設定 資料壓縮四個方面進行概括 一 硬體調優 硬體型別劃分 記憶體 cpu 硬碟 網路 通過sql server的 活動監視器 最近耗費大量資源的查詢 功能,通過對cpu耗時和執行次數排序,這裡假設所有語句的併發數與執行時長均合理,以此判定cpu是否...