程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> 一次SQL調優數據庫機能成績後的進程(300W)

一次SQL調優數據庫機能成績後的進程(300W)

編輯:MSSQL

一次SQL調優數據庫機能成績後的進程(300W)。本站提示廣大學習愛好者:(一次SQL調優數據庫機能成績後的進程(300W))文章只能為提供參考,不一定能成為您想要的結果。以下是一次SQL調優數據庫機能成績後的進程(300W)正文


將絕年夜部門的SQL查詢改成存儲進程,如許的操作毫無疑問可以進步部門機能。
但凡應用“select * from xxx”的操作一概詳細到所需字段。
應用join銜接2個以上年夜量數據的表,且基本數據表變更不年夜的查詢一概應用視圖,並為此視圖樹立索引。來由來自SQL Server聯機贊助手冊: “關於尺度視圖而言,為每一個援用視圖的查詢靜態生成成果集的開支很年夜,特殊是關於那些觸及對年夜量行停止龐雜處置(如聚合年夜量數據或聯接很多行)的視圖。假如在查詢中頻仍地援用這類視圖,可經由過程對視圖創立獨一集合索引來進步機能。對視圖創立獨一集合索引後,成果集將存儲在數據庫中,就像帶有集合索引的表一樣。
對視圖創立索引的另外一個利益是:優化器可以在未直接在 FROM 子句中指定某一視圖的查詢中應用該視圖的索引。如許一來,可從索引視圖檢索數據而無需從新編碼,由此帶來的高效力也使現有查詢獲益。”
但凡應用 "select count(*) from xxx" 或是"select count(id) from xxx”(此處id為主鍵)的查詢,一概改成”select count(1) from xxx”,實際上采取*來做聚合值,SQL Server會主動尋覓最適合的字段以停止聚合,但如許依然會占用體系開支,即便主鍵也沒有1來得快。
關於多前提的組合查詢,我們普通會寫成”where ((@condition is null) or (condition=@condition))”情勢的存儲進程前提來停止查詢,但如許的操作會由於”is null ”招致機能成績,重復實地檢測後采取了”where 1 = 1 ”,然後依據前提“IF @condition IS NOT NULL SET @sqlText=@sqlText+' AND Condition=''' + @Condition +'''',最初 “exec sp_executesql @sqlText” 的方法,如許確切可帶來顯著的機能晉升,剖析應是”is null ”或”is not null”招致了索引掉效,停止了全表掃描。
對應用row_number()函數的表樹立適合的索引,必需要有最適合的索引能力防止重建索引時的全表row_number()運算帶來的機能成績,並且索引的偏向也很主要,好比時光類的索援用降序常常比升序機能高。
這個不是機能成績,但也很主要,在存儲進程中應應用scope_identity()函數來取得最新的標量,而不是@@Identity這個全局變量,由於@@Identity會遭到觸發器的影響而掉去准確值。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved