多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 數據庫 > Sqlserver > SQL Server 2000優化SELECT語句方法

SQL Server 2000優化SELECT語句方法

來源:程序員人生   發布時間:2014-02-09 21:43:16 閱讀次數:2830次
本文是SQL Server SQL語句優化系列文章的第一篇。該系列文章描述了在Micosoft’s SQLServer2000關系數據庫管理系統中優化SELECT語句的基本技巧,我們討論的技巧可在Microsoft's SQL Enterprise Manager或 Microsoft SQL Query Analyzer(查詢分析器)提供的Microsoft圖形用戶界面使用。

除調優方法外,我們給你展示了最佳實踐,你可應用到你的SQL語句中以提高性能(所有的例子和語法都已在Microsoft SQL Server 2000中驗證)。

閱讀該系列文章后,你應該對Microsoft 工具包中提供的查詢優化工具和技巧有一個基本的了解,我們將提供包含各種各樣的以提高性能和加速數據讀取操作的查詢技巧。

Microsoft提供了三種調優查詢的主要的方法:

使用SET STATISTICS IO 檢查查詢所產生的讀和寫;

使用SET STATISTICS TIME檢查查詢的運行時間;

使用SET SHOWPLAN 分析查詢的查詢計劃 。

SET STATISTICS IO

命令SET STATISTICS IO ON 強制SQL Server 報告執行事務時I/O的實際活動。它不能與SET NOEXEC ON 選項配對使用,因為它僅僅對監測實際執行命令的I/O活動有意義。一旦這個選項被打開,每個查詢產生包括I/O統計信息的額外輸出。為了關閉這個選項,執行SET STATISTICS IO OFF。

注:這些命令也能在 Sybase Adaptive Server中運行,雖然結果集可能看起來有點不同。

例如,下面是在Northwind 數據庫中對于employees表上的一個行統計的簡單查詢腳本而獲得的I/O統計信息:

SET STATISTICS IO ON
GO
SELECT COUNT(*) FROM employees
GO
SET STATISTICS IO OFF
GO
Results:
---------------
2977

Table ‘Employees’ . Scan count 1,
logical read 53, physical reads 0, readahead reads 0.

這個掃描統計告訴我們掃描執行的數量,邏輯讀顯示的是從緩存中讀出來的頁面的數量,物理讀顯示的是從磁盤中讀的頁面的數量,Read-ahead 讀顯示了放置在緩存中用于將來讀操作的頁面數量。

此外,我們執行一個系統存儲過程獲得表大小的統計信息以供我們分析:

sp_spaceused employees
Results:
name rows reserved data index_size unused
-------------- -------- --------- -------
Employees 2977 2008KB 1504KB 448KB 56KB

通過看這些信息我們能得到些什么呢?

這個查詢沒有掃描整個表,在表中的數據量超過1.5M字節,而僅僅執行了53個邏輯I/O操作就得到了結果。這表明該查詢發現了一個可用來計算結果的索引,并且掃描索引比掃描所有數據頁花費更少的I/O操作。

索引頁幾乎全部放在數據緩存中,所以物理讀的值是零。這是因為我們之前不久是在employees表上執行了其他查詢,此時表和它的索引已經被緩存。你的查詢開銷可能有不同。

Microsoft報告沒有read-ahead(預讀)活動。在這種情況下,數據和索引頁已經被緩存起來了。當對一個很大的表作表掃描時,read-ahead可能會半路插入進來,并且在你的查詢用到它們之前緩存起所需的頁。當SQL Server確定你的事務是順序讀取數據庫頁并且認為它能預測到你下一步將用到的頁面時,Real-ahead會自動打開。實際上一個獨立的SQL Server連接在你的進程之前已開始運行并為它緩存數據頁。(配置和優化read-ahead 參數已超出這篇文章的討論范圍。

在這個例子中,該查詢已經盡可能有效率地執行了,不必進一步優化。

SET STATISTICS TIME

一個事務的實耗時間是一個不穩定的測量,因為這些時間與在服務器上其他用戶的活動有關。然而,相比那些對你的用戶沒有任何意義的數據頁數字,它提供了一些實際的測量。他們關心等待查詢返回的時間消耗,不關心數據的緩存和有效的read-ahead。SET STATISTICS TIME ON命令報告下面的查詢的實際占用時間和CPU使用情況。執行SET STATISTICS TIME OFF禁止這個選項。

SET STATISTICS TIME ON
GO
SELECT COUNT(*) FROM titleauthers
GO
SET STATISTICS TIME OFF
GO
Results:
SQL Server Execution Times;
Cup time=0 ms. Elapsed time=8672 ms.
SQL Server Parse and Compile Time:
Cpu time=10 ms

----------------
25

(1 row(s) affected)

SQL Servre Execution Times:
Cpu time=0 ms.? Elapsed time=10 ms.
SQL Server Parse and Compile Time:
Cup time=0 ms

第一條信息報告了多少使人困惑的占用(實耗)時間,8672豪秒,這個數據與我們的腳本不相關,這顯示的是之前一個命令執行以來逝去的時間。你可以忽略這條信息。SQL Server僅僅花費10毫秒時間去分析和編譯該查詢。花費0毫秒去執行它(在查詢結果可看到)。其真實的意思是這個查詢所花費的時間太短以至不能計量。最后的信息報告了這個SET STATISTICS TIME OFF命令相關的分析及編譯花費了0毫秒。你可以忽略這個信息。最重要的信息以加重字體突出顯示。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产欧美精品区一区二区三区 | 欧美国产亚洲一区 | 国产欧美一区二区三区小说 | 国产高清精品入口91 | 一区二区视频在线观看免费的 | 国产精品成人免费福利 | 秋霞福利| 久久精品九九亚洲精品天堂 | 国产美女一级做受在线观看 | 成人综合色站 | 国产精品欧美一区二区三区 | 国产精品久久久久9999赢消 | 亚洲成年人影院 | 日韩一级欧美一级一级国产 | 亚洲全网成人资源在线观看 | 欧美free嫩交videoxxx | 亚洲美女影院 | 亚洲精品亚洲人成人网 | 爱爱视频天天看 | 国产精品毛片在线大全 | 免费在线观看亚洲 | 毛片毛片毛片 | 亚洲精品综合 | 欧美成人午夜视频在线观看 | 日本高清免费视频色www | 亚洲影院手机版777点击进入影院 | 国产精品视频国产永久视频 | 日韩欧美亚洲综合一区二区 | 成人国产欧美精品一区二区 | 欧洲美女性做爰 | 亚洲综合免费视频 | 男人都懂的www网站免费观看 | 春色精品视频在线播放 | 欧美性受一区二区三区 | 在线播放国产一区 | 国产一区精品 | 视频在线视频免费观看 | 狂野黑人性猛交xxxxxx | 曰本人一级毛片免费完整视频 | 欧美疯狂性受xxxxx另类 | 国产国语在线播放视频 |