SQL Server資料庫效能優化(1)T SQL

2021-08-20 08:05:36 字數 1620 閱讀 7701

1. select 語句的效能

1)只查詢需要的字段,避免使用select *。

只查詢需要的字段,可以避免許多不必要的io。

減少欄位的輸出,可以更有效地利用覆蓋索引。

2)限定查詢結果集的數量。

使用top字句等限制結果集的大小,可以避免批量資料的操作,並且有效地使用索引,防止掃瞄操作帶來的大量io和記憶體的使用。

3)盡量地使用有效的索引

當需要對資料進行行過濾的時候,應該優先考慮使用索引字段;

若有多個索引欄位可供選擇,優先選擇以篩選率較高,也就是重複率比較低的索引字段作為過濾條件。一般會選擇將資料重複率低於5%的字段作為索引過濾字段。

注意:在編寫sql時,以下幾點容易被忽略:

1)不要再過濾欄位上使用任何的計算,包括函式、邏輯計算、普通的計算等,因為這些字段計算公式的加入,將造成查詢優化器無法使用相應欄位的索引。

2)盡量使用有索引的字段進行排序,特別是排序的資料量比較大室時,這可以很大程度上降低排序操作帶來的成本開銷。

3)填寫查詢表時,盡量使用join關鍵字連線表,這樣語句才清晰,易於閱讀,不易缺失關聯條件。關聯條件的缺失容易造成查詢笛卡爾兒乘積。在調優時常會發現這樣的情況,原本只需要查詢百條資料,其查詢結果卻變成了數十萬條,計算的資料量積呈幾何倍增加了。

2. order by 排序效能的影響

order by 子句的效能取決於參與排序操作的資料量的大小。

排序操作會在資料篩選完以後,對篩選出的結果集進行排序。因此,對於需要排序的查詢,應將排序操作控制在結果集資料量盡量小的查詢中,避免對大批量資料進行排序操作,這樣可以避免不必要的cpu資源消耗,並且當排序操作超過可以分配的記憶體大小時,會把排序的中間資料存放在tempdb資料庫中,這將增加io操作,導致語句的效能大大下降。

在不得不對大量資料進行排序操作的情況下,是當地建立一些索引對排序操作會有一定的幫助。

排序對tempdb的影響。

tempd是sql server的乙個系統資料庫,用於儲存查詢過程中產生的中間資料。在進行排序操作時,如果工作區記憶體不足,就需要使用tempdb資料庫來完成排序操作。此時排序操作產生的部分中間資料被寫入tempdb中, 由於有了磁碟io操作的開銷,排序操作將受到影響,這時不再如單純的記憶體操作那樣快了,而且當tempdb比較繁忙時,若併發量達到一定量級,也會對排序造成影響,隨著承受著影響的操作請求數量不斷增加,伺服器的壓力將越來越大,從而形成乙個惡性迴圈。因此,在對查詢進行排序時,需要注意,若進行排序操作的資料量足夠大,就會對整個資料庫例項造成一定的壓力。當這個壓力增長到一定程度時,將導致整個資料庫出現大批量sql語句執行效能下降的情況。

簡單舉個例子,某伺服器的乙個查詢語句需要進行排序操作,而排序的資料集的資料量很龐大,又有2億,資料量大小達到了5gb,那麼該查詢至少需要使用5gb的tempdb磁碟空間。tempdb磁碟占用增長了,需要大量無聊磁碟io來寫入資料檔案,導致語句的效能變差,並且由於tempdb是公共資源,此時很容易造成磁碟資源阻塞,影響到其他回話的正常工作。

tempdb的大量使用,也可能使tempdb的資料檔案擴大到磁碟無法容納的程度,此時伺服器上的其他操作將會受到影響。因此在應用排序時,應清楚地知道排序的資料量範圍,以避免伺服器上的其他操作受到影響。

資料庫效能調優 三

影響資料庫效能的主要因素 伺服器硬體的因素 伺服器數量 記憶體 cpu 磁碟 cpu 單台雙cpu 磁碟 高轉速 越高越高,1w以上 硬碟的插槽支援雙通道,記憶體型號一樣.網路環境 盡可能組建分布式的平台,使用raid 資料庫設計 資料查詢 伺服器硬體及網路的建議 增加伺服器的數量,組建分布式平台 ...

sql server效能調優

我踩過的聽過的那些坑 第24 24周 資料庫維護 database maintenance 第23 24周 臨時資料庫 tempdb 第22 24周 等待和i o延遲統計 第21 24周 效能監控 pal工具 第20 24周 死鎖 deadlocking 第19 24周 鎖公升級 lock esca...

SQL Server資料庫查詢效能優化

在 sql查詢中應盡量使用索引列加快查詢速度。在並行處理時注意鎖的粒度。盡量使用正邏輯而不是非邏輯。避免使用關鍵字 like 只要可能,盡量在搜尋條件中使用精確的比較和值的域。使用 order by 會影響查詢的速度。任何 order by 語句的非索引項或者計算表示式將減低查詢。連線查詢比子查詢效...