1.查詢計畫文字顯示
set showplan_text on
set statistics profile on
2.幾個指標
1. 【table scan】:遍歷整個表,查詢所匹配的記錄行。這個操作將會一行一行的檢查,當然,效率也是最差的。
2. 【index scan】:根據索引,從表中過濾出來一部分記錄,再查詢所匹配的記錄行,顯示比第一種方式的查詢範圍要小,因此比【table scan】要快。
3. 【index seek】:根據索引,定位(獲取)記錄的存放位置,然後取得記錄,因此,比起前二種方式會更快。
4. 【clustered index scan】:和【table scan】一樣。注意:不要以為這裡有個index,就認為不一樣了。其實它的意思是說:按聚集索引來逐行掃瞄每一行記錄,因為記錄就是按聚集索引來順序存放的。而【table scan】只是說:要掃瞄的表沒有聚集索引而已,因此這二個操作本質上也是一樣的。
5. 【clustered index seek】:直接根據聚集索引獲取記錄,最快!
所以,當發現某個查詢比較慢時,可以首先檢查哪些操作的成本比較高,再看看那些操作是查詢記錄時,是不是【table scan】或者【clustered index scan】,如果確實和這二種操作型別有關,則要考慮增加索引來解決了。不過,增加索引後,也會影響資料表的修改動作,因為修改資料表時,要更新相應欄位的索引。所以索引過多,也會影響效能。還有一種情況是不適合增加索引的:某個欄位用0或1表示的狀態。例如可能有絕大多數是1,那麼此時加索引根本就沒有意義。這時只能考慮為0或者1這二種情況分開來儲存了,分表或者分割槽都是不錯的選擇。
sql server 查詢計畫
在你的執行sql 語句之前加上 下面這句話 就可以列出相應的執行計畫 set statistics profile on 執行計畫簡單說明 rows 表示在乙個執行步驟中,所產生的記錄條數。真實資料,非預期 executes 表示某個執行步驟被執行的次數。真實資料,非預期 stmt text 表示要...
sqlserver 分頁查詢總結
sqlserver2008不支援關鍵字limit 所以它的分頁sql查詢語句將不能用mysql的方式進行,幸好sqlserver2008提供了top,rownumber等關鍵字,這樣就能通過這幾個關鍵字實現分頁。下面是本人在網上查閱到的幾種查詢指令碼的寫法 幾種sqlserver2008高效分頁sq...
sqlserver 分頁查詢總結
sqlserver2008不支援關鍵字limit 所以它的分頁sql查詢語句將不能用mysql的方式進行,幸好sqlserver2008提供了top,rownumber等關鍵字,這樣就能通過這幾個關鍵字實現分頁。下面是本人在網上查閱到的幾種查詢指令碼的寫法 幾種sqlserver2008高效分頁sq...