sql server2005查詢優化建議

2021-05-21 23:39:42 字數 1233 閱讀 6007

查詢優化的目的是提高資料檢索速度,提高資料檢索意味著減少磁碟

io讀取或者邏輯記憶體讀取次數,這需要從兩個方面入手:資料要盡可能的快取到記憶體、盡可能的使用索引。記憶體的問題可以參見

,本文主要是體現如何使用索引來提高速度。具體方法: 1)

養成良好的程式設計習慣,比如sarg 優化(這個好像來自於sybase ) 2)

使用查詢計畫,看某乙個查詢是否是使用了索引,是否是使用了臨時表,盡量使用索引,避免臨時表 3)

使用查詢優化顧問,它可以幫助你判斷查詢是否優化,並提示你建立索引 4)

使用set statistics io 命令,檢視磁碟讀取次數,盡量物理磁碟和邏輯讀取次數少 5)

建立主鍵,主鍵是聚簇索引,資料行基於聚集索引鍵按順序儲存 6)

使用組合索引,避免or 操作符使用臨時表,select * from table where a=1 or b=2, 可以考慮建立a and b 的組合索引 7)

大資料量表使用已分割槽表,具體參見:

使用儲存過程代替複雜sql 語句 9)

儲存過程中使用表變數而不使用臨時表,通常,表變數可提供更有效的查詢 處理:table

變數的行為類似於區域性變數,有明確定義的作用域;在儲存過程中使用table

變數與使用臨時表相比,減少了儲存過程的重新編譯量;涉及table

變數的事務只在table

變數更新期間存在。因此減少了table

變數對鎖定和記錄資源的需求。但不能顯式建立table

變數的索引,也不保留table

變數的任何統計資訊。在某些情況下,可以通過改用支援索引和統計資訊的臨時表來改善效能。具體參見:

10)當必須對臨時表顯式地建立索引時,或多個儲存過程或函式必須使用錶值時,臨時表很有用。使用大容量日誌模式可以提高臨時表大量插入資料的效率。

SQLSERVER 2005 遞迴查詢

專案中有使用者組表usergroup如下 其中pid表示當前組的上級組 表資料如下 現在想查詢出頂級組 沒有上級組叫頂級組 a1組的所有子孫組id,sql如下 查詢子節點 with rtd1 as select id pid from usergroup rtd2 as select from rt...

SQLSERVER 2005 遞迴查詢

專案中有使用者組表usergroup如下 其中pid表示當前組的上級組 表資料如下 現在想查詢出頂級組 沒有上級組叫頂級組 a1組的所有子孫組id,sql如下 查詢子節點 with rtd1 as select id pid from usergroup rtd2 as select from rt...

SQL SERVER 2005 遠端查詢

在從事開發工作時一些比較大的專案會使用到多個資料庫,在寫檢視和儲存過程時常會用到遠端查詢,下面著重介紹一下在sql2005下如何通過建立鏈結伺服器,使sql可以對遠端的sql伺服器或oracle伺服器進行遠端查詢 一.建立sql到sql的遠端查詢 1.新增鏈結伺服器 exec sp addlinke...