本文轉自:http://www.zhixing123.cn/net/27495.html
對於做管理系統和分析系統的程序員,復雜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 毫秒。
經理的: 
SQL Server 執行時間:
CPU 時間= 16 毫秒,占用時間= 547 毫秒。
CPU 時間= 47 毫秒,占用時間= 491 毫秒。
CPU 時間= 32 毫秒,占用時間= 436 毫秒。
CPU 時間= 47 毫秒,占用時間= 416 毫秒。
PS:今天在做一道題目的時候,經理給出的一道難題,雖然做出來了,但是性能沒有做到最優化。
其中用到了三層嵌套。
現在特別是要總結的:大表跟小表進行關聯查詢 時,涉及到嵌套查詢,先查詢小表,然后再聯合大表。
我是一開始讓大小表進行關聯,然后再嵌套。而經理寫的是先讓小表嵌套,最后在關聯。這樣,執行效率自然要比我高
