對於作管理系統和分析系統的程序員,複雜SQL語句是不可避免的,面對海量數據,有時候通過優化的某一條語句,能夠提升執行效率和總體運行性能。如何選擇SQL語句,本文提供了兩種方法,分別對多條SQL進行量化的分析。程序員
在測試SQL性能的過程當中。
一是經過設置STATISTICS查看執行SQL時的系統狀況。選項有PROFILE,IO ,TIME。
SET STATISTICS PROFILE ON:顯示分析、編譯和執行查詢所需的時間(以毫秒爲單位)。
SET STATISTICS IO ON:報告與語句內引用的每一個表的掃描數、邏輯讀取數(在高速緩存中訪問的頁數)和物理讀取數(訪問磁盤的次數)有關的信息。
SET STATISTICS TIME ON:顯示每一個查詢執行後的結果集,表明查詢執行的配置文件。
實例以下:
SET STATISTICS PROFILE ON
SET STATISTICS IO ON
SET STATISTICS TIME ON
GO
–你的SQL腳本開始
SELECT [TestCase] FROM [TestCaseSelect]
–你的SQL腳本結束
GO
SET STATISTICS PROFILE OFF
SET STATISTICS IO OFF
SET STATISTICS TIME OFF緩存
另外,也能夠經過手工添加語句,計算執行時間來查看執行語句花費了的時間,以判斷該條SQL語句的效率如何:
declare @d datetime
set @d=getdate()
–你的SQL腳本開始
SELECT [TestCase] FROM [TestCaseSelect]
–你的SQL腳本結束
select [語句執行花費時間(毫秒)]=datediff(ms,@d,getdate())性能
二是經過SQL 2008的「查詢」按鈕下的「包括實際的執行計劃」和「包括客戶端統計信息」。測試
下面是我和經理寫的兩個例子的性能對比:優化
個人:
SQL Server 執行時間:
CPU 時間= 32 毫秒,佔用時間= 762 毫秒。
CPU 時間= 16 毫秒,佔用時間= 475 毫秒。
CPU 時間= 32 毫秒,佔用時間= 671 毫秒。
CPU 時間= 31 毫秒,佔用時間= 615 毫秒。spa
經理的:
SQL Server 執行時間:
CPU 時間= 16 毫秒,佔用時間= 547 毫秒。
CPU 時間= 47 毫秒,佔用時間= 491 毫秒。
CPU 時間= 32 毫秒,佔用時間= 436 毫秒。
CPU 時間= 47 毫秒,佔用時間= 416 毫秒。blog
PS:今天在作一道題目的時候,經理給出的一道難題,雖然作出來了,可是性能沒有作到最優化。其中用到了三層嵌套。如今特別是要總結的:大表跟小表進行關聯查詢 時,涉及到嵌套查詢,先查詢小表,而後再聯合大表。我是一開始讓大小表進行關聯,而後再嵌套。而經理寫的是先讓小表嵌套,最後在關聯。這樣,執行效率天然要比我高get