來自:
sql server 查詢效能優化——堆表、碎片與索引(一)
sql server 查詢效能優化——堆表、碎片與索引(二)
sql server 查詢效能優化——覆蓋索引(一)
sql server 查詢效能優化——覆蓋索引(二)
sql server 查詢效能優化——建立索引原則(一)
sql server 查詢效能優化——建立索引原則(二)
sql server 查詢效能優化——索引與sarg(一)
sql server 查詢效能優化——索引與sarg(二)
sql server 查詢效能優化——索引與sarg(三)
sql server 查詢效能優化——索引與sarg(四)
簡記sarg的定義:用於限制搜尋的乙個操作,因為它通常是指乙個特定的匹配,乙個值得範圍內的匹配或者兩個以上條件的and連線。sarg 包含常量描述式(或是可以解析成常量的變數)來與資料表中的字段做比較。sarg 的格式是:
列名 操作符 《常數 或 變數》
或《常數 或 變數》 操作符 列名
列名出現在操作符的一邊,而常量或變數出現在另一邊。如果列名同時出現在操作的兩邊就不算是sarg。
sarg包含以下操作符=、>、<、>=、<=、between及部分情況下的like。like是否符合sarg,要看萬用字元%所在的位置。例如:like '胡%'就是符合sarg,但是'%胡'就不符合sarg。因為以萬用字元開頭無法限制sql server查詢記錄的數量,索引的擺放依然是以小到大,或以大到小順序排列,如果以萬用字元「%」開頭就無法利用有序的結構,以二分法來快速查詢資料。
1、 不要對where子句做運算
先以簡單的範例來比較sarg 和非sarg ,你可以通過managemenet studio來檢視查詢優化程式是否可以有效分析該語句。
2 請不要進行負向查詢
除了不應該對欄位資料進行計算外,非sarg 語句的格式語句還包含在where條件子句中,使用負向查詢操作符。
如not 、!=、<> 、!>、!<、not exists 、not in及not like 等,因為通過有順序的索引結構,sql server 可以有效地利用二分法進行查詢,快速找到相應的資料,但是如果查詢條件是不要什麼資料,其餘的都要(就是負向查詢), 則 無法利用索引進行二分查詢,只能進行全表掃瞄或聚集索引掃瞄。
以下同樣是負向操作健立的sarg 條件查詢與非sarg 條件查詢範例。從中可以看出兩者的執行成本是不一樣的,相差十倍左右,但是其資料查詢的記錄數量也不一樣。個人理解查詢優化程式是根據資料查詢的記錄數量,來決定使用哪種執行計畫。
3 不要在where子句中對字段使用函式
在查詢語句中對字段使用函式,就是對欄位資料進行計算,所以這些都不算是sarg。使用函式之後 ,sql server 需要將資料表內所有記錄的相關字段輸入到函式中,如果有100萬條記錄,就需要呼叫函式100萬次,這將是效能殺手。
SQL SERVER效能優化 查詢速度提高
近段時間去面試,很多都會問到關於sql語句優化及大資料量資料查詢速度提公升的問題,但是由於我個人之前開發都是一知半解的狀態,很多東西都沒能掌握明白,感覺自己就是菜鳥一枚,暈死,和朋友閒聊聊到查詢效率的提公升可以通過建立聚集索引分割槽。所以,就好好了解下這其中的原理。一.索引的概念 資料庫索引,是資料...
SQLServer效能優化之查詢提示
資料庫於週日被重啟了,剛好看看優化後的效果,順便再找找新的需要優化的sql 剛好找到了類似的幾條語句,如下 select from tablea where id not in select id from tableb 從執行時間20秒 70秒不等。開始分析 首先是否用上索引,兩個id均是主鍵所以...
SQL Server 查詢效能優化 相關文章
來自 sql server 查詢效能優化 堆表 碎片與索引 一 sql server 查詢效能優化 堆表 碎片與索引 二 sql server 查詢效能優化 覆蓋索引 一 sql server 查詢效能優化 覆蓋索引 二 sql server 查詢效能優化 建立索引原則 一 sql server 查...