




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、基于SQL SERVER的數(shù)據(jù)庫(kù)查詢優(yōu)化淺析論文導(dǎo)讀:在數(shù)據(jù)庫(kù)的眾多應(yīng)用實(shí)例中,相對(duì)于數(shù)據(jù)庫(kù)的其他操作,查詢操作所占的比重最大,根據(jù)的統(tǒng)計(jì)資料,數(shù)據(jù)庫(kù)管理系統(tǒng)以上的工作是用于數(shù)據(jù)的查詢和檢索。因此,查詢速度的快慢直接影響到數(shù)據(jù)庫(kù)系統(tǒng)的性能。為了優(yōu)化數(shù)據(jù)庫(kù)系統(tǒng)的性能,除了可以通過改進(jìn)數(shù)據(jù)庫(kù)使用的硬件條件、軟件環(huán)境和規(guī)范化設(shè)計(jì)外,數(shù)據(jù)查詢的優(yōu)化,提高查詢的響應(yīng)時(shí)間對(duì)于改善性能也至關(guān)重要。關(guān)鍵詞:SQLSERVER,數(shù)據(jù)庫(kù),查詢,優(yōu)化1 概述在數(shù)據(jù)庫(kù)的眾多應(yīng)用實(shí)例中,相對(duì)于數(shù)據(jù)庫(kù)的其他操作,查詢操作所占的比重最大,根據(jù) 的統(tǒng)計(jì)資料, 數(shù)據(jù)庫(kù)管理系統(tǒng)以上的工作是用于數(shù)據(jù)的查詢和檢索。因此,查詢速度的快
2、慢直接影響到數(shù)據(jù)庫(kù)系統(tǒng)的性能。為了優(yōu)化數(shù)據(jù)庫(kù)系統(tǒng)的性能,除了可以通過改進(jìn)數(shù)據(jù)庫(kù)使用的硬件條件、軟件環(huán)境和規(guī)范化設(shè)計(jì)外,數(shù)據(jù)查詢的優(yōu)化,提高查詢的響應(yīng)時(shí)間對(duì)于改善 性能也至關(guān)重要。2 邏輯結(jié)構(gòu)設(shè)計(jì)關(guān)系的規(guī)范化是一種根據(jù)關(guān)系的屬性間函數(shù)相關(guān)性的規(guī)則把數(shù)據(jù)分布到多個(gè)表的技術(shù)。規(guī)范化程度較高,進(jìn)行查詢時(shí)就容易會(huì)產(chǎn)生占用較高系統(tǒng)資源和高I/O的代價(jià),會(huì)降低系統(tǒng)響應(yīng)時(shí)間。為了提高數(shù)據(jù)庫(kù)的性能,可使用含有一定數(shù)據(jù)冗余的較低范式的關(guān)系,當(dāng)然這種樣做會(huì)使系統(tǒng)產(chǎn)生數(shù)據(jù)不一致性問題。因此在數(shù)據(jù)庫(kù)的邏輯設(shè)計(jì)時(shí),我們需要在數(shù)據(jù)冗余度和響應(yīng)時(shí)間上進(jìn)行權(quán)衡考慮,靈活的采用規(guī)范化和非規(guī)范化相結(jié)合的策略進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)。2.1減
3、少連接運(yùn)算連接運(yùn)算是開銷很大的操作,參與連接的關(guān)系越多、越大,開銷也越大。必須進(jìn)行連接時(shí),一般要先使用選擇、投影等操作把不需要的數(shù)據(jù)都去掉,以減少連接的負(fù)擔(dān)。我們數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),規(guī)范化設(shè)計(jì)一般是將非規(guī)范化的實(shí)體分割成較小的列和更多的表,從而減少數(shù)據(jù)的冗余,消除更新、刪除異常。但關(guān)系劃分的越細(xì),我們?cè)诓樵儠r(shí)就會(huì)涉及到多張表,要使用多的連接,從而就會(huì)大大降低查詢的效率。所以我們數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí),并非達(dá)到的范式越高越好,為了保證查詢性能,有時(shí)不得不犧牲規(guī)范化的要求選擇較低的范式。2.2 分割關(guān)系關(guān)系的大小對(duì)查詢的速度影響頗大,有時(shí)候我們會(huì)將一個(gè)很大的關(guān)系分割成幾個(gè)小的關(guān)系來(lái)提高查詢。(1)從垂直方向分割關(guān)
4、系。若把一個(gè)關(guān)系中常用的屬性和很少使用的屬性分成兩個(gè)關(guān)系,則可提高常用查詢的速度,要注意的是分割時(shí),每個(gè)關(guān)系中都必須含有首要關(guān)鍵字。(2)水平分割關(guān)系。例如關(guān)于學(xué)生的數(shù)據(jù),可以把全校學(xué)生的數(shù)據(jù)放在一個(gè)關(guān)系中,也可按系建立學(xué)生關(guān)系。前者對(duì)全校范圍的查詢是方便的,后者可以顯著提高一個(gè)系范圍內(nèi)的查詢速度。如果一般的查詢都由系里的人員進(jìn)行,查詢的是本系內(nèi)的內(nèi)容,則按系建立學(xué)生關(guān)系可以提高性能。如果數(shù)據(jù)庫(kù)系統(tǒng)有多個(gè)磁盤驅(qū)動(dòng)器,則可把水平分割的關(guān)系分布在不同的磁盤組上,可以并行訪問,提高數(shù)據(jù)庫(kù)的性能。3 物理結(jié)構(gòu)設(shè)計(jì)物理結(jié)構(gòu)設(shè)計(jì)的目的是使數(shù)據(jù)庫(kù)中數(shù)據(jù)以合理的存儲(chǔ)結(jié)構(gòu)和存儲(chǔ)方法存儲(chǔ)在物理設(shè)備上。(1)當(dāng)進(jìn)行
5、數(shù)據(jù)存儲(chǔ)時(shí)把頻繁被訪問的數(shù)據(jù)或記錄同較少被訪問的數(shù)據(jù)或記錄分開,分別放到高速和低速存儲(chǔ)設(shè)備上。(2)把text、image和大二進(jìn)制類型字段列存放在一個(gè)單獨(dú)的物理設(shè)備上可以提高訪問的性能。(3)選擇合適的字段類型,特別是對(duì)于被索引的列更是如此。比如能使用tinyint類型就不要用bigint類型,這樣的關(guān)系可以減少I/O操作。4 合理使用索引當(dāng)SQL Server需要定位某一行記錄或某一范圍的記錄時(shí),首先確定表中是否存在索引:如果不存在有效的索引,則對(duì)整個(gè)表進(jìn)行逐行的掃描;如果存在索引,則使用索引對(duì)數(shù)據(jù)進(jìn)行訪問。索引的作用即相當(dāng)于書的日錄,通過索引可快速定位所需要查找的內(nèi)容,避免全表搜索的發(fā)生
6、。但使用索引也存在如下的問題:一是索引需要占用額外的存儲(chǔ)空間;二是在數(shù)據(jù)進(jìn)行更新時(shí),索引也要作出相應(yīng)的更新,因此會(huì)增加許多額外的開銷。因此,索引的使用要恰到好處??梢钥紤]建立索引的列:(1)主鍵通常,檢索、存取表是通過主鍵來(lái)進(jìn)行的。因此,應(yīng)該考慮在主鍵上建立索引。(2) 連接中頻繁使用的列用于連接的列若按順序存放,系統(tǒng)可以很快地執(zhí)行連接。如外鍵,除用于實(shí)現(xiàn)參照完整性外,還經(jīng)常用于進(jìn)行表的連接。(3) 在某一范圍內(nèi)頻繁搜索的列和按排序順序頻繁檢索的列。不考慮創(chuàng)建索引的列:(1) 很少或從來(lái)不在查詢中引用的列,因?yàn)橄到y(tǒng)很少或從來(lái)不根據(jù)這個(gè)列的值去查找數(shù)據(jù)行。(2)只有兩個(gè)或很少幾個(gè)值的列(如性別,
7、只有兩個(gè)值“男”或“女”),以這樣的列創(chuàng)建索引并不能得到建立索引的好處。(3)以bit、text、image數(shù)據(jù)類型定義的列。(4)數(shù)據(jù)行數(shù)很少的小表一般也沒有必要?jiǎng)?chuàng)建索引。表上的索引過多會(huì)影響更新、插入、刪除的性能,因?yàn)樗械乃饕柬氉鱿鄳?yīng)的調(diào)整;另外,所有的分頁(yè)操作都被記錄在日志中,這也會(huì)增加I/O操作。索引應(yīng)根據(jù)需要而定,不要盲目多建。5 查詢語(yǔ)句優(yōu)化用戶所寫的查詢語(yǔ)句的優(yōu)劣對(duì)于查詢效率至關(guān)重要。5.1 簡(jiǎn)化排序應(yīng)簡(jiǎn)化或避免對(duì)大型表進(jìn)行重復(fù)的排序。如果排序不可避免,則應(yīng)盡量簡(jiǎn)化它,如縮小排序的列的范圍等。5.2 使用exist謂詞代替in子查詢子查詢含有exists謂詞時(shí),子查詢都只要判
8、斷邏輯的真假。這樣DBMS的優(yōu)化器就僅根據(jù)索引就可以完成工作。因此使用exists謂詞查詢效率能比In子查詢效率高。此外盡可能用not exists代替not in也可提高查詢效能。5.3盡量避免相關(guān)子查詢。SQL中的嵌套查詢分為兩種相關(guān)子查詢和非相關(guān)子查詢。相關(guān)子查詢是一個(gè)列的標(biāo)簽同時(shí)在主查詢和where子句中的查詢中出現(xiàn),執(zhí)行時(shí)子查詢的查詢條件要依賴于主查詢所訪問的一個(gè)記錄行。當(dāng)主查詢中的列值改變之后,子查詢必須重新查詢一次。查詢嵌套層次越多,效率越低,因此應(yīng)當(dāng)盡量避免這種相關(guān)子查詢,如不能避免時(shí),那么要在子查詢中過濾掉盡可能多的行。5.4盡可能使用“=”代替like子句LIKE關(guān)鍵字支持
9、模糊匹配,但這種模糊匹配耗時(shí)間。如果可以替換,那么使用“=”操作符的WHERE子句性能最好。5.5優(yōu)化SELECT子句SELECT*請(qǐng)求返回的是查詢表中所有的列。如果在SELECT子句中只選擇必要的列,那相對(duì)于SELECT *子句可減少客服之間的通信量,當(dāng)客服連接距離比較遠(yuǎn)時(shí)更明顯。5.6盡量不用游標(biāo)因?yàn)橛螛?biāo)會(huì)引起頁(yè)級(jí)和表級(jí)鎖,且消耗網(wǎng)絡(luò)資源,又有較多的處理指令,所以除非必要,盡量不用游標(biāo),而采用等價(jià)的語(yǔ)句,即使語(yǔ)句會(huì)涉及到多個(gè)表掃描,也會(huì)更好在某些必須使用游標(biāo)的場(chǎng)合,可考慮將符合條件的數(shù)據(jù)行轉(zhuǎn)入臨時(shí)表中,再對(duì)臨時(shí)表定義游標(biāo)進(jìn)行操作,這樣可使性能得到明顯提高5.7存儲(chǔ)過程的使用存儲(chǔ)過程是 服務(wù)器上一組預(yù)先定義并編譯好的 語(yǔ)句,當(dāng)一個(gè)存儲(chǔ)過程被第一次運(yùn)行時(shí), 將該存儲(chǔ)過程放入內(nèi)存并完全編譯。在該存儲(chǔ)過程被再次調(diào)用時(shí)可以被馬上處理, 沒有任何額外開銷。充分利用存儲(chǔ)過程,可以減少網(wǎng)絡(luò)流量,加快執(zhí)行速度,提高查詢性能,同時(shí)也減少程序員的編程工作量。6 結(jié)束語(yǔ)SQL優(yōu)化的實(shí)質(zhì)就是在結(jié)果正確的前提下,用優(yōu)化器可以識(shí)別的語(yǔ)句,充分利用索引,減少表掃描的/次數(shù),盡量避免表搜索的發(fā)生的性能優(yōu)化是一個(gè)復(fù)雜的過程。上述這些只是涉及應(yīng)用層次的一些設(shè)計(jì)方法,深入研究還會(huì)涉及數(shù)據(jù)庫(kù)層的資源配置!網(wǎng)絡(luò)層的流量控制以及操作系統(tǒng)層的總體設(shè)計(jì)。參考文獻(xiàn)1 楊學(xué)全,SQL SERVER實(shí)例教程(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流專業(yè)托管承包合同
- 普法宣講【法律學(xué)堂】第八章 訴訟保全申請(qǐng)書-ldfjxs004
- 肇慶市實(shí)驗(yàn)中學(xué)高三上學(xué)期語(yǔ)文高效課堂教學(xué)設(shè)計(jì):詩(shī)歌鑒賞3
- 沈陽(yáng)化工大學(xué)《汽車文化》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西省上饒市玉山縣2025年三下數(shù)學(xué)期末質(zhì)量檢測(cè)模擬試題含解析
- 玉溪市通??h2025年五年級(jí)數(shù)學(xué)第二學(xué)期期末檢測(cè)試題含答案
- 西安建筑科技大學(xué)華清學(xué)院《運(yùn)動(dòng)控制系統(tǒng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 吉林市昌邑區(qū)2025屆數(shù)學(xué)三下期末復(fù)習(xí)檢測(cè)試題含解析
- 深圳市華僑實(shí)驗(yàn)中學(xué)2024-2025學(xué)年初三下-期中考試生物試題試卷含解析
- 內(nèi)蒙古鄂托克旗2025年初三下學(xué)期二模(4月)生物試題含解析
- 2025年廣東省中考總復(fù)習(xí)·數(shù)學(xué) 第一部分 第三章 第13課時(shí) 反比例函數(shù)
- 食品銷售提成管理制度
- 自制結(jié)婚協(xié)議書范本
- 統(tǒng)編版二年級(jí)語(yǔ)文下冊(cè)第四單元自測(cè)卷(含答案)
- 湘豫名校聯(lián)考2024-2025學(xué)年高三春季學(xué)期第二次模擬考試化學(xué)答案
- 2025年醫(yī)院?jiǎn)T工滿意度提升計(jì)劃
- 學(xué)會(huì)自我保護(hù)課件
- 政府會(huì)計(jì)實(shí)務(wù)(第六版)課件 3.政府會(huì)計(jì)核算模式
- 借助deepseek提升科技研發(fā)效率與質(zhì)量
- 精神科護(hù)理不良事件分析討論
- 2025年全職高手測(cè)試題及答案
評(píng)論
0/150
提交評(píng)論