隨著軟體系統的複雜度提高,軟體系統的效能瓶頸可能出現的地方有很多,可能是**,也可能是應用伺服器,可能是前端介面層,也可能是中介軟體,還有,可能是資料庫。而對於資料庫出現瓶頸而言,又要分兩種情況,一種是資料庫架構、設計有問題;另外一種則是提交處理的sql語句有問題。
據統計,在資料庫應用系統中,大部分的效能問題都是由於低效率的sql語句造成的,在效能問題中佔了80%以上的比例。這提醒我們,軟體系統中的sql語句測試和效能調優不可忽視。我們需要通過優化sql語句來避免很多資料庫的效能問題。
sql測試和調優過程
乙個標準的sql測試和調優過程需要包括4個迭代步驟:
(1)識別有問題的sql語句
第一步是找到引起效能問題的sql語句,這些sql語句可能嵌入在前端程式**中,可能在後台資料庫物件中,例如儲存過程、檢視等。
對於那些動態構建的sql語句,也就是說只有程式執行時才組合建立成可執行的sql語句,我們可以通過一些工具來捕獲它們,例如對於sqlserver,可以使用附帶的事件探查器。
(2)優化sql語句
第二步是在資料庫中準備適當的資料,執行sql語句,檢視效能表現。資料的準備工作可以通過編寫insert語句來完成,也可以借助一些現成的工具(例如datafactory)來完成。
在這裡,sql optimizer會自動分析這條sql語句的資料庫執行計畫。sql optimizer的auto tune功能則可以智慧型地對給定的sql語句進行分析,找出語義上一致的可替換語句,也就是說找出那些能查詢出相同結果,但是寫法不一樣的sql語句。
例如下面的sql語句可以中使用了in關鍵字:
但是要得到同樣的查詢結果,我們也可以用exists關鍵字,只不過語句的寫法不一樣:
測試sql語句效能
有時候我們經常為我們的sql語句執行效率低下發愁,反覆優化後,可還是得不到提高 那麼你就用這條語句找出你sql到底是在 慢了 示例 set statistics io on set statistics time on go 你要測試的sql語句 select top 100 from tbl co...
mysql語句高階 Mysql高階SQL語句
show columns from table name from database name 或show columns from database name.table name 或show fields 解釋 顯示表中列名稱 和 desc table name 命令的效果是一樣的 檢視連線數,...
mysql執行語句 mysql執行sql語句過程
流程概述 mysql得到sql語句後,大概流程如下 1.sql的解析器 負責解析和 sql 2.預處理器 對解析後的sql樹進行驗證 3.查詢優化器 得到乙個執行計畫 4.查詢執行引擎 得到資料結果集 5.將資料放回給呼叫端。流程圖如下所示 分發器及快取階段 首先,如果系統的快取功能開啟著的話,sq...