影響資料庫效能的主要因素
伺服器硬體因素
-伺服器數量
-記憶體,CPU,磁碟
網路環境
資料庫設計
資料查詢
伺服器硬體及網路的建議
增加伺服器的數量,組件分布式平台
增加cpu數量
增加記憶體容量和頻率,開啟雙通道等
硬碟更換為多塊高速硬碟
網路選用千兆以上頻寬,有可能的話可選用光線
網路線路最好專線專用,避免其他網路資料(BT)佔用
資料庫設計原則的建議
規範命名
三少原則(資料表,欄位,組合主鍵)
控制欄位引用
庫表的重複控制
並發控制
必要的討論
資料小組的審核
標頭檔的處理
資料庫設計工作的建議
分類拆分資料量大的表(減少單表記錄數)
適當考慮分布式分區
合理的索引設計
資料操作的最佳化
資料庫參數的調整
避免長事務(分解事務,減少負荷,提高效率)
適當超前(考慮未來擴充)
必要的工具
資料庫效能調優的原則
儘可能排除資源瓶頸(cpu,ram,i/o,network)
儘可能減少資料庫的i/o
儘可能使用index seek,避免使用index scan
減少阻塞,死結和不恰當的索引
儘可能不用遊標
儘可能不用觸發器而使用預存程序
資料查詢最佳化的方法
減少資料庫訪問量和資料轉送量
避免使用不相容的資料類型
避免在where子句中的'='左側使用運算式
避免使用!=或<>,IS NULL或IS NOT NULL,IN或NOT IN(這些沒法讓表示用索引,只能掃描表)
避免在索引欄位中使用非字元打頭的搜尋,如'%Abc%'
儘可能使用UNION方案替換或條件(也是影響最佳化查詢)
盡量考慮where及order by子句間的順序按索引順序
盡量使用數字型欄位
盡量使用>=替換>
合理使用exists和not exists(if exists(select * from News where Id=111) begin select
12 end)
合理使用視圖(建議不要做視圖嵌套)
合理演算法的使用
必要時強制使用索引
適當考慮物理分開儲存
使用適合的工具
執行計畫(如果大多數是索引尋找,證明最佳化得很好)
最佳化一般使用SQL Server Profiler(一般只看Completed和Batch Completed的事件)
主要看cpu,duration,reads,writes
SQL Server2005的幾個特性
varchar(MAX)/nvarchar(MAX)/varbinary(MAX),分別替換已有的text,ntext,image
XML類型
計算欄位的持久化
索引附加欄位
索引檢視表,可對視圖建立索引,提高效率,但是該視圖不能有視圖引用
2005支援動態指示top數量
行號,注意最後面再跟order by的情況。ROW_NUMBER/RANK/DENSE_RANK/NTILE(select * from
(select ROW_NUMBER() over(order by Id desc) as rowid,* from News) where rowid>100 )
臨時視圖with
分區PARTITION
小結
使用合適的方法,做合適的事兒
熟能生巧
凡事從多角度考慮一下