版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、。數(shù)據(jù)庫(kù)優(yōu)化方案1.高效地設(shè)計(jì)SQL語句:通常,可以使用以下方法來優(yōu)化數(shù)據(jù)操作的SQL性能:(1)減少對(duì)數(shù)據(jù)庫(kù)的查詢次數(shù),即減少對(duì)系統(tǒng)資源的請(qǐng)求。使用分布式數(shù)據(jù)庫(kù)對(duì)象(如快照和渲染)可以減少對(duì)數(shù)據(jù)庫(kù)的查詢數(shù)量。(2)盡量使用相同或非常相似的SQL語句進(jìn)行查詢,這不僅充分利用了SQL共享池中解析后的語法樹,而且大大增加了要查詢的數(shù)據(jù)在SGA命中的可能性。(3)避免無條件執(zhí)行SQL語句。當(dāng)執(zhí)行不帶任何條件的SQL語句時(shí),通常會(huì)執(zhí)行FTS。數(shù)據(jù)庫(kù)首先定位一個(gè)數(shù)據(jù)塊,然后依次查找其他數(shù)據(jù),這對(duì)于大型表來說是一個(gè)漫長(zhǎng)的過程。(4)如果對(duì)某些表中的數(shù)據(jù)有約束,最好用描述性完整性來實(shí)現(xiàn)正在構(gòu)建的表的SQL語
2、句,而不是使用SQL程序。1.操作員優(yōu)化:1.輸入運(yùn)算符用語言編寫的SQL的優(yōu)點(diǎn)是編寫簡(jiǎn)單明了,更適合現(xiàn)代軟件開發(fā)的風(fēng)格。然而,帶輸入的SQL的性能總是很低。從Oracle執(zhí)行的步驟來看,帶輸入的SQL和不帶輸入的SQL之間存在以下差異:ORACLE試圖將其轉(zhuǎn)換成多個(gè)表的連接。如果轉(zhuǎn)換不成功,請(qǐng)先在in中執(zhí)行子查詢,然后查詢外層的表記錄。如果轉(zhuǎn)換成功,直接使用多表連接模式進(jìn)行查詢??梢钥闯觯瑤л斎氲腟QL至少還有一個(gè)轉(zhuǎn)換過程。常規(guī)SQL可以成功轉(zhuǎn)換,但帶有分組統(tǒng)計(jì)的SQL不能轉(zhuǎn)換。盡量不要在業(yè)務(wù)密集型的SQL中使用輸入運(yùn)算符。在優(yōu)化sql時(shí),我們經(jīng)常會(huì)遇到在中使用的語句,所以我們必須用exis
3、ts替換它,因?yàn)镺racle以O(shè)r的方式處理in,即使它使用索引,速度也會(huì)很慢。2.不在操作員中不建議使用強(qiáng)列,因?yàn)樗鼰o法應(yīng)用表的索引。替換為不存在或(外部連接判斷為空)方案3.為空或非空操作通常,判斷字段是否為空不會(huì)應(yīng)用索引,因?yàn)锽樹索引不索引空值。相反,對(duì)于同一函數(shù)的其他操作,a不為空將被更改為a0或a ,等等。該字段不允許為空,但使用默認(rèn)值代替空值。例如,業(yè)務(wù)擴(kuò)展應(yīng)用程序中的狀態(tài)字段不允許為空,默認(rèn)值為應(yīng)用程序。避免在索引列上使用“為空”和“不為空”。避免在索引中使用任何可為空的列,否則ORACLE將無法使用該索引。對(duì)于單列索引,如果列包含空值,則該記錄將不存在于索引中。對(duì)于復(fù)合索引,如
4、果每一列都為空,則該記錄也不會(huì)存在于索引中。如果至少有一列不為空,則該記錄存在于索引中。例如,如果唯一索引建立在表的A和B列上,并且表中有一條記錄的A和B值為(123,空),則ORACLE將不接受下一條具有相同A和B值的記錄(123,空)(插入)。但是,如果所有索引列都為空,ORACLE將認(rèn)為整個(gè)鍵值為空,這不等于空.因?yàn)樗饕兄胁淮嬖诳罩担栽赪HERE子句中比較索引列的空值將導(dǎo)致ORACLE禁用索引。低效率:(索引失敗)從部門代碼不為空的部門中選擇;高效:(索引有效)從部門中選擇其中部門代碼=0;4、和運(yùn)算符(大于或小于運(yùn)算符)一般來說,大于或小于的運(yùn)算符不需要調(diào)整,因?yàn)槿绻兴饕?,?/p>
5、會(huì)按索引進(jìn)行搜索,但在某些情況下可以進(jìn)行優(yōu)化,例如一個(gè)表有100萬條記錄,一個(gè)數(shù)字字段為A,一條記錄有300,000條記錄A=0,300,000條記錄A=1,390,000條記錄A=21,000條記錄A=3。那么執(zhí)行A2的效果與執(zhí)行A=3的效果有很大不同,因?yàn)楫?dāng)A2被執(zhí)行時(shí),ORACLE將首先找到記錄索引2,然后進(jìn)行比較,而當(dāng)A=3時(shí),ORACLE將直接找到記錄索引=3。替換為=高效:從部門中選擇其中部門代碼=0;低效率:從EMPWHERE DEPTNO 3中選擇*它們之間的區(qū)別在于,前者的數(shù)據(jù)庫(kù)管理系統(tǒng)將直接跳轉(zhuǎn)到第一條記錄,其中DEPT等于4,而后者將首先定位DEPT編號(hào)=3的記錄,并向前
6、掃描到DEPT大于3的第一條記錄。5.喜歡的操作員:通配符查詢可以應(yīng)用于LIKE運(yùn)算符,其中通配符的組合幾乎可以是任意的。但是,如果使用不當(dāng),將會(huì)導(dǎo)致性能問題。例如,像“t00%”這樣的詞不會(huì)引用索引,但像“x5400%”這樣的詞會(huì)引用范圍索引。一個(gè)實(shí)際的例子:在YW_YHJBQK表中,可以使用業(yè)務(wù)號(hào)之后的賬戶識(shí)別號(hào)來查詢業(yè)務(wù)號(hào)YY _ BH,如“t00%”,這將產(chǎn)生一個(gè)全表掃描。如果更改為YY _ BH,如 x5400% 或YY _ BH,如 b5400% YY_BH的索引將用于兩個(gè)范圍的查詢,性能肯定會(huì)有很大的提高。6.將DISTINCT替換為EXISTS:提交包含一對(duì)多表信息(如部門表和
7、員工表)的查詢時(shí),請(qǐng)避免在SELECT子句中使用DISTINCT。通常,我們可以考慮用EXIST替換它,這樣可以加快查詢速度,因?yàn)镽DBMS核心模塊會(huì)在滿足子查詢的條件后立即返回結(jié)果。示例:(低效):從部門D中選擇不同的部門號(hào),部門名,此處為部門號(hào)=部門號(hào)(高效):從存在的部門中選擇部門編號(hào)、部門名稱(從環(huán)境管理計(jì)劃中選擇此處的部門編號(hào)=部門編號(hào));例如:用存在替換為,用不存在替換為:在許多基于基本表的查詢中,為了滿足一個(gè)條件,通常需要外連接另一個(gè)表。在這種情況下,使用EXISTS(或NOT EXISTS)通常會(huì)提高查詢效率。在子查詢中,非輸入子句將執(zhí)行內(nèi)部排序和合并。在任何情況下,“不在”都
8、是效率最低的(因?yàn)樗鼘?duì)子查詢中的表執(zhí)行完整的表遍歷)。為了避免使用不輸入,示例:(高效):從EMP(基本表)中選擇EMPNO和存在的位置(從部門選擇,部門=環(huán)境管理計(jì)劃。DEPTNO和LOC=MELB)(低效):*從EMP(基本表格)中選擇,其中EMPNO和DEPTNOIN(選擇DEP交通運(yùn)輸部,其中LOC=MELB)7.用聯(lián)合替換或(適用于索引列)一般來說,用UNION代替WHERE子句中的OR會(huì)有更好的效果。對(duì)索引列使用或?qū)?dǎo)致全表掃描。請(qǐng)注意,上述規(guī)則僅對(duì)多個(gè)索引列有效。如果有未編制索引的列,查詢效率可能會(huì)降低,因?yàn)槟鷽]有選擇或。在下面的例子中,LOC_ID和REGION都有索引。(高效
9、):從鎖定標(biāo)識(shí)=10的位置選擇鎖定標(biāo)識(shí)、鎖定DESC、區(qū)域從地區(qū)=墨爾本的位置,聯(lián)合選擇地區(qū)標(biāo)識(shí),地區(qū)DESC(低效):從位置選擇鎖定標(biāo)識(shí)、鎖定DESC、區(qū)域,其中鎖定標(biāo)識(shí)=10或區(qū)域=墨爾本如果您堅(jiān)持使用或,您需要返回記錄最少的索引列,并將其寫在前面。8.將或替換為輸入這是一個(gè)簡(jiǎn)單易記的規(guī)則,但是實(shí)際的執(zhí)行效果需要檢查。在ORACLE8i下,兩者的執(zhí)行路徑似乎是相同的。低效率:選擇從鎖定標(biāo)識(shí)=10或鎖定標(biāo)識(shí)=20或鎖定標(biāo)識(shí)=30的位置高效:從鎖定位置選擇(10,20,30);二、SQL語句結(jié)構(gòu)優(yōu)化1.避免在SELECT子句中使用“* ”:2.將刪除替換為截?cái)啵菏褂肨RUNCATE代替DELE
10、TE刪除所有表記錄:(對(duì)于具有大數(shù)據(jù)量的表的子方法)刪除表中的記錄時(shí),通常使用回滾段來存儲(chǔ)可以恢復(fù)的信息。如果沒有COMMIT事務(wù),ORACLE會(huì)將數(shù)據(jù)恢復(fù)到刪除前的狀態(tài)(確切地說,恢復(fù)到執(zhí)行刪除命令前的狀態(tài)),而當(dāng)使用TRUNCATE時(shí),回滾段不再存儲(chǔ)任何可恢復(fù)的信息。3.將HAVING子句替換為Where子句:避免使用HAVING子句。HAVING僅在檢索到所有記錄后過濾結(jié)果集。這個(gè)過程需要分類、合計(jì)和其他操作。如果記錄的數(shù)量能夠受到WHERE條款的限制,這方面的成本就能夠降低。(在非oracle中)在三個(gè)條件子句中,on、where和having、on先執(zhí)行,然后是where。最后,因?yàn)?/p>
11、在進(jìn)行統(tǒng)計(jì)之前對(duì)不合格記錄進(jìn)行過濾,所以可以減少在中間操作中要處理的數(shù)據(jù)。可以合理地說,速度應(yīng)該是最快的,而且應(yīng)該比擁有更快4.大寫sql語句因?yàn)閛racle總是先分析sql語句,然后在執(zhí)行前將小寫字母轉(zhuǎn)換成大寫字母。5.在Java代碼中盡量少用連接器“”連接字符串!6.避免改變索引列的類型。比較不同數(shù)據(jù)類型的數(shù)據(jù)時(shí),ORACLE會(huì)自動(dòng)對(duì)列執(zhí)行簡(jiǎn)單的類型轉(zhuǎn)換。假設(shè)EMPNO是數(shù)值類型的索引列。從EMP中選擇實(shí)際上,在ORACLE類型轉(zhuǎn)換后,語句被轉(zhuǎn)換為:從EMP中選擇其中EMPNO=TO_NUMBER(123)幸運(yùn)的是,類型轉(zhuǎn)換沒有發(fā)生在索引列上,索引的目的也沒有改變?,F(xiàn)在,假設(shè)EMP_TYP
12、E是字符類型的索引列。從電磁脈沖中選擇其中電磁脈沖類型=123該語句被ORACLE轉(zhuǎn)換為:從電磁脈沖中選擇至_號(hào)(電磁脈沖類型)=123由于內(nèi)部類型轉(zhuǎn)換,將不使用此索引!為了避免ORACLE對(duì)您的SQL進(jìn)行隱式類型轉(zhuǎn)換,最好是顯式表達(dá)類型轉(zhuǎn)換。請(qǐng)注意,當(dāng)字符與數(shù)值進(jìn)行比較時(shí),ORACLE會(huì)優(yōu)先將數(shù)值轉(zhuǎn)換為字符類型7.通過:優(yōu)化組為了提高GROUP BY語句的效率,可以在GROUP BY之前過濾掉不必要的記錄。以下兩個(gè)該查詢返回相同的結(jié)果,但是第二個(gè)結(jié)果顯然要快得多。低效率:1從環(huán)境管理小組中選擇工作,AVG(薩爾)按工作職位=總裁或工作職位=經(jīng)理高效:1從環(huán)境管理計(jì)劃中選擇工作,AVG(薩爾)
13、,其中工作=總裁工作=經(jīng)理組工作數(shù)據(jù)庫(kù)優(yōu)化方案1.使用表分區(qū)分區(qū)在物理上分離數(shù)據(jù),不同分區(qū)的數(shù)據(jù)可以被公式化并存儲(chǔ)在不同磁盤上的數(shù)據(jù)文件中。這樣,當(dāng)查詢這個(gè)表時(shí),只需要掃描表分區(qū),而不是掃描整個(gè)表,這明顯縮短了查詢時(shí)間。此外,不同磁盤中的分區(qū)也將數(shù)據(jù)傳輸分配到該表的不同磁盤輸入/輸出中,精心設(shè)置的分區(qū)可以將數(shù)據(jù)傳輸平均分配到磁盤輸入/輸出競(jìng)爭(zhēng)中。這種方法可用于包含大量數(shù)據(jù)的時(shí)間表??梢悦吭伦詣?dòng)創(chuàng)建表分區(qū)。2.別名的使用別名是大規(guī)模數(shù)據(jù)庫(kù)的應(yīng)用技巧,即在查詢中表名和列名用一個(gè)字母進(jìn)行別名,查詢速度比建立連接表快1.5倍。3.指數(shù)指標(biāo)的優(yōu)化設(shè)計(jì)索引可以大大加快數(shù)據(jù)庫(kù)的查詢速度。索引將表中的邏輯值映
14、射到安全的RowID,因此索引可以快速定位數(shù)據(jù)的物理地址。當(dāng)使用索引查詢大型表時(shí),索引數(shù)據(jù)可能會(huì)耗盡所有塊緩存空間,ORACLE必須頻繁讀寫才能獲取數(shù)據(jù)。因此,在對(duì)大型表進(jìn)行分區(qū)后,可以根據(jù)相應(yīng)的分區(qū)建立分區(qū)索引。然而,我個(gè)人認(rèn)為并不是所有的表都需要索引,而是只有數(shù)據(jù)量大的表才需要索引。缺點(diǎn):首先,創(chuàng)建和維護(hù)索引需要時(shí)間,這隨著數(shù)據(jù)量的增加而增加。其次,索引需要占用物理空間。除了數(shù)據(jù)表,每個(gè)索引還需要占用一定的物理空間。如果要建立聚集索引,所需的空間會(huì)更大。第三,在添加、刪除和修改表中的數(shù)據(jù)時(shí),需要?jiǎng)討B(tài)維護(hù)索引,降低了數(shù)據(jù)維護(hù)的速度。需要維護(hù)索引:為了維護(hù)系統(tǒng)性能,在創(chuàng)建索引后,由于頻繁的添加、刪除和修改數(shù)據(jù)等操作,索引頁(yè)被分割,因此必須維護(hù)索引。調(diào)整硬盤輸入/輸出這一步是在信息系統(tǒng)開發(fā)之前完成的。數(shù)據(jù)庫(kù)管理員可以將構(gòu)成相同表空間的數(shù)據(jù)文件放在不同的硬盤上,以平衡硬盤之間的輸入輸出負(fù)載。當(dāng)磁盤豐富時(shí),還應(yīng)遵守以下原則:把表格和索引分開;l創(chuàng)建用戶表空間,并將磁盤與系統(tǒng)表空間分開;l在創(chuàng)建表和索引時(shí)指定不同的表空間;為回滾段創(chuàng)建一個(gè)特殊的表空間,以防止空間競(jìng)爭(zhēng)影響事務(wù)的完成;l為排序操作創(chuàng)建臨時(shí)表空間,以盡可能防止數(shù)據(jù)庫(kù)碎片存在于多個(gè)表空間中。在使用物化視圖的過程中,我們基本上可以“將其視為一個(gè)實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2026年湘教版初一歷史上冊(cè)期末考試卷含答案
- 2025-2026年蘇課新版九年級(jí)語文上冊(cè)期末考試卷含答案
- 2025-2026年四年級(jí)數(shù)學(xué)上冊(cè)期末考試試題及答案
- 道德品行培訓(xùn)課件
- 2023+STS臨床實(shí)踐指南:房顫的外科治療解讀
- 新高一化學(xué)暑假銜接(人教版):第17講 元素周期律【學(xué)生版】
- 世界精神衛(wèi)生日宣傳方案
- 車險(xiǎn)網(wǎng)絡(luò)客服培訓(xùn)課件
- 能量芯節(jié)電產(chǎn)品營(yíng)銷招商方案計(jì)劃書
- 馬蓮臺(tái)煤礦應(yīng)急預(yù)案考試試卷
- (2025)70周歲以上老年人換長(zhǎng)久駕照三力測(cè)試題庫(kù)(含答案)3
- 口腔科門診主任年度工作匯報(bào)
- 福建省能源石化集團(tuán)有限責(zé)任公司2025年秋季招聘?jìng)淇碱}庫(kù)及一套完整答案詳解
- 2025年新聞?dòng)浾哔Y格證及新聞寫作相關(guān)知識(shí)題庫(kù)附答案
- DB32∕T 5188-2025 經(jīng)成人中心靜脈通路裝置采血技術(shù)規(guī)范
- 深圳市2024-2025學(xué)年九年級(jí)上學(xué)期期末考試化學(xué)試卷(含答案)
- 白車身輕量化設(shè)計(jì)技術(shù)
- 華師 八年級(jí) 數(shù)學(xué) 下冊(cè)《17.2 平行四邊形的判定 》課件
- 主板維修課件
- 2026中央紀(jì)委國(guó)家監(jiān)委機(jī)關(guān)直屬單位招聘24人考試筆試模擬試題及答案解析
- 2026年內(nèi)蒙古化工職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試必刷測(cè)試卷附答案解析
評(píng)論
0/150
提交評(píng)論