十步優(yōu)化sqlserver中的數(shù)據(jù)訪問

十步優(yōu)化sqlserver中的數(shù)據(jù)訪問

ID:30410821

大小:139.86 KB

頁數(shù):47頁

時間:2018-12-29

十步優(yōu)化sqlserver中的數(shù)據(jù)訪問_第1頁
十步優(yōu)化sqlserver中的數(shù)據(jù)訪問_第2頁
十步優(yōu)化sqlserver中的數(shù)據(jù)訪問_第3頁
十步優(yōu)化sqlserver中的數(shù)據(jù)訪問_第4頁
十步優(yōu)化sqlserver中的數(shù)據(jù)訪問_第5頁
資源描述:

《十步優(yōu)化sqlserver中的數(shù)據(jù)訪問》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在應用文檔-天天文庫。

1、十步優(yōu)化SQLServer中的數(shù)據(jù)訪問故事開篇:你和你的團隊經(jīng)過不懈努力,終于使網(wǎng)站成功上線,剛開始時,注冊用戶較少,網(wǎng)站性能表現(xiàn)不錯,但隨著注冊用戶的增多,訪問速度開始變慢,一些用戶開始發(fā)來郵件表示抗議,事情變得越來越糟,為了留住用戶,你開始著手調(diào)查訪問變慢的原因。經(jīng)過緊張的調(diào)查,你發(fā)現(xiàn)問題出在數(shù)據(jù)庫上,當應用程序嘗試訪問/更新數(shù)據(jù)時,數(shù)據(jù)庫執(zhí)行得相當慢,再次深入調(diào)查數(shù)據(jù)庫后,你發(fā)現(xiàn)數(shù)據(jù)庫表增長得很大,有些表甚至有上千萬行數(shù)據(jù),測試團隊開始在生產(chǎn)數(shù)據(jù)庫上測試,發(fā)現(xiàn)訂單提交過程需要花5分鐘時間,但在網(wǎng)站上線前的測試中,提交一次訂單只需要2/3秒。類似這種故事在世界各個角落每天都會上演,幾

2、乎每個開發(fā)人員在其開發(fā)生涯中都會遇到這種事情,我也曾多次遇到這種情況,因此我希望將我解決這種問題的經(jīng)驗和大家分享。如果你正身處這種項目,逃避不是辦法,只有勇敢地去面對現(xiàn)實。首先,我認為你的應用程序中一定沒有寫數(shù)據(jù)訪問程序,我將在這個系列的文章中介紹如何編寫最佳的數(shù)據(jù)訪問程序,以及如何優(yōu)化現(xiàn)有的數(shù)據(jù)訪問程序。范圍在正式開始之前,有必要澄清一下本系列文章的寫作邊界,我想談的是"事務性(OLTP)SQLServer數(shù)據(jù)庫中的數(shù)據(jù)訪問性能優(yōu)化",但文中介紹的這些技巧也可以用于其它數(shù)據(jù)庫平臺。同時,我介紹的這些技巧主要是面向程序開發(fā)人員的,雖然DBA也是優(yōu)化數(shù)據(jù)庫的一支主要力量,但DBA使用的優(yōu)化

3、方法不在我的討論范圍之內(nèi)。當一個基于數(shù)據(jù)庫的應用程序運行起來很慢時,90%的可能都是由于數(shù)據(jù)訪問程序的問題,要么是沒有優(yōu)化,要么是沒有按最佳方法編寫代碼,因此你需要審查和優(yōu)化你的數(shù)據(jù)訪問/處理程序。我將會談到10個步驟來優(yōu)化數(shù)據(jù)訪問程序,先從最基本的索引說起吧!第一步:應用正確的索引我之所以先從索引談起是因為采用正確的索引會使生產(chǎn)系統(tǒng)的性能得到質(zhì)的提升,另一個原因是創(chuàng)建或修改索引是在數(shù)據(jù)庫上進行的,不會涉及到修改程序,并可以立即見到成效。我們還是溫習一下索引的基礎知識吧,我相信你已經(jīng)知道什么是索引了,但我見到很多人都還不是很明白,我先給大家將一個故事吧。很久以前,在一個古城的的大圖書館中

4、珍藏有成千上萬本書籍,但書架上的書沒有按任何順序擺放,因此每當有人詢問某本書時,圖書管理員只有挨個尋找,每一次都要花費大量的時間。[這就好比數(shù)據(jù)表沒有主鍵一樣,搜索表中的數(shù)據(jù)時,數(shù)據(jù)庫引擎必須進行全表掃描,效率極其低下。]更糟的是圖書館的圖書越來越多,圖書管理員的工作變得異常痛苦,有一天來了一個聰明的小伙子,他看到圖書管理員的痛苦工作后,想出了一個辦法,他建議將每本書都編上號,然后按編號放到書架上,如果有人指定了圖書編號,那么圖書管理員很快就可以找到它的位置了。[給圖書編號就象給表創(chuàng)建主鍵一樣,創(chuàng)建主鍵時,會創(chuàng)建聚集索引樹,表中的所有行會在文件系統(tǒng)上根據(jù)主鍵值進行物理排序,當查詢表中任一

5、行時,數(shù)據(jù)庫首先使用聚集索引樹找到對應的數(shù)據(jù)頁(就象首先找到書架一樣),然后在數(shù)據(jù)頁中根據(jù)主鍵鍵值找到目標行(就象找到書架上的書一樣)。]于是圖書管理員開始給圖書編號,然后根據(jù)編號將書放到書架上,為此他花了整整一天時間,但最后經(jīng)過測試,他發(fā)現(xiàn)找書的效率大大提高了。[在一個表上只能創(chuàng)建一個聚集索引,就象書只能按一種規(guī)則擺放一樣。]但問題并未完全解決,因為很多人記不住書的編號,只記得書的名字,圖書管理員無賴又只有掃描所有的圖書編號挨個尋找,但這次他只花了20分鐘,以前未給圖書編號時要花2-3小時,但與根據(jù)圖書編號查找圖書相比,時間還是太長了,因此他向那個聰明的小伙子求助。[這就好像你給Pro

6、duct表增加了主鍵ProductID,但除此之外沒有建立其它索引,當使用ProductName進行檢索時,數(shù)據(jù)庫引擎又只要進行全表掃描,逐個尋找了。]聰明的小伙告訴圖書管理員,之前已經(jīng)創(chuàng)建好了圖書編號,現(xiàn)在只需要再創(chuàng)建一個索引或目錄,將圖書名稱和對應的編號一起存儲起來,但這一次是按圖書名稱進行排序,如果有人想找"DatabaseManagementSystem"一書,你只需要跳到"D"開頭的目錄,然后按照編號就可以找到圖書了。于是圖書管理員興奮地花了幾個小時創(chuàng)建了一個"圖書名稱"目錄,經(jīng)過測試,現(xiàn)在找一本書的時間縮短到1分鐘了(其中30秒用于從"圖書名稱"目錄中查找編號,另外根據(jù)編號查

7、找圖書用了30秒)。圖書管理員開始了新的思考,讀者可能還會根據(jù)圖書的其它屬性來找書,如作者,于是他用同樣的辦法為作者也創(chuàng)建了目錄,現(xiàn)在可以根據(jù)圖書編號,書名和作者在1分鐘內(nèi)查找任何圖書了,圖書管理員的工作變得輕松了,故事也到此結束。到此,我相信你已經(jīng)完全理解了索引的真正含義。假設我們有一個Products表,創(chuàng)建了一個聚集索引(根據(jù)表的主鍵自動創(chuàng)建的),我們還需要在ProductName列上創(chuàng)建一個非聚集索引,創(chuàng)建非聚集索引時,數(shù)據(jù)

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。