版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
如何寫出優(yōu)質(zhì)高效的數(shù)據(jù)庫(kù)程序基本原則簡(jiǎn)單的是最有力的;2/8原則;性能優(yōu)化是動(dòng)力是基于對(duì)美的追求?;炯s定SQL語(yǔ)句書寫的約定,如關(guān)鍵字要大寫,函數(shù),對(duì)象名,變量要小寫,一個(gè)關(guān)鍵字一行,每行以關(guān)鍵字右對(duì)齊,等號(hào)左右各空一位等,各個(gè)部分僅空一格;在SQL語(yǔ)句中對(duì)于值非常多的列條件要用變量綁定,不要用常量;對(duì)于值少記錄多,且分布不均勻,如果要用上該列的索引,就要用常量。在SQL語(yǔ)句中盡量不要用左值函數(shù);查詢條件的順序要盡量能夠利用已有索引,如果不能利用現(xiàn)有的索引而需要新建綜合索引,索引列的順序、查詢條件的順序要和表中的列順序一致。如果能夠確保兩個(gè)輸出值集沒有重復(fù)值,UnionAll比Union有效率。一些建議某些復(fù)雜和耗時(shí)的SQL語(yǔ)句可以考慮采用幾個(gè)語(yǔ)句來(lái)完成。對(duì)使用外連接的語(yǔ)句,可以嘗試用一些組合語(yǔ)句來(lái)代替。如果能夠用行操作SQL語(yǔ)句完成,不要用集操作SQL(如count,Distinct,minus,intersect)語(yǔ)句完成。問題1SELECTBOARD_BARCODEFROMSMT_BOARD_WORK_RECbwr,SMT_DEP_TASK_INFOdtiWHEREBOARD_BARCODE='025767102A000842'ANDdti.Second_Series='標(biāo)準(zhǔn)'andbwr.Task_No=dti.Task_NoANDPROC_ORDER=1;SELECTBOARD_BARCODEFROMSMT_BOARD_WORK_RECbwr,SMT_DEP_TASK_INFOdtiWHEREBOARD_BARCODE=:b1ANDdti.Second_Series='標(biāo)準(zhǔn)'andbwr.Task_No=dti.Task_NoANDPROC_ORDER=1;沒有用變量綁定,導(dǎo)致大量的Parse,占用CPU時(shí)間和內(nèi)存。效果下面是使用文字變量和綁定變量通過(guò)Spotlight進(jìn)行對(duì)比的觀察結(jié)果。不良代碼為執(zhí)行1500行操作,將同樣的SQL解釋了500次,對(duì)應(yīng)的在內(nèi)存中占用500倍的空間,帶來(lái)嚴(yán)重的latch爭(zhēng)用。
。在使用綁定變量的情況下,留意對(duì)應(yīng)SQL的Loads和Exections列值,運(yùn)行次數(shù)逐漸增長(zhǎng)為500、1000、1500直到2000。而變化時(shí),Loads值始終是1,說(shuō)明sharedpool共享性好,同時(shí)latch爭(zhēng)用也會(huì)比較少。問題2SELECT
ROWID,
organization_id,
wip_entity_name,
cpb_bar_code,
cpb_revision,
cpb_item_id,
zcb_bar_code,
zcb_revision,
zcb_item_id,
created_date,
created_by,
last_updated_by,
last_updated_date,
collect_user
FROMhw_cpb_relation
WHERETO_CHAR(created_date,'yyyy/mm/ddhh24:mi:ss')
>=
'2002/10/1615:16:06'SELECT
ROWID,
organization_id,
wip_entity_name,
cpb_bar_code,
cpb_revision,
cpb_item_id,
zcb_bar_code,
zcb_revision,
zcb_item_id,
created_date,
created_by,
last_updated_by,
last_updated_date,
collect_user
FROMhw_cpb_relation
WHEREcreated_date>=to_date(:b1,'yyyy/mm/ddhh24:mi:ss’)
在SQL語(yǔ)句的Where條件的字段上加上函數(shù),導(dǎo)致索引不可用或效率低索引的創(chuàng)建經(jīng)常在哪些字段做連接或加過(guò)濾條件數(shù)據(jù)是否經(jīng)常做update值的重復(fù)頻率是否非常高是否幾個(gè)字段一起經(jīng)常用來(lái)做組合查詢索引的建立原則對(duì)于值不多但記錄非常多,且值分布比較均勻的字段,基于此字段的索引對(duì)查詢的優(yōu)化沒有作用,同時(shí)帶來(lái)Insert操作時(shí)索引的維護(hù)開銷;對(duì)于狀態(tài)類字段,值不多,如果記錄多,但這些記錄在狀態(tài)中的分布極不均勻,可以建立索引,索引的條件帶常量才可用到索引。索引的使用不應(yīng)當(dāng)用于表上10%以上的數(shù)據(jù)。很小的表一兩次IO就可以對(duì)其掃描也沒有必要使用索引組合索引可以壓縮以減少IO,但會(huì)增加CPU的消耗反序索引的使用Bitmap索引的使用不要在表上建太多索引編寫sql的一些技巧使用hints,讓sql按照希望的方式來(lái)執(zhí)行不使用某些特定的索引不要頻繁commit業(yè)務(wù)規(guī)則定義在數(shù)據(jù)庫(kù)底層的效率高外鍵應(yīng)當(dāng)被索引存儲(chǔ)過(guò)程要比外部過(guò)程效率高盡可能使用綁定變量來(lái)減少HARDPARSE盡可能重用游標(biāo)來(lái)減少SOFTPARSE為什么索引沒有被使用查詢條件沒有包含組合索引的主要邊界索引不包含空的條目查詢條件對(duì)索引列使用了函數(shù)低效的索引CBO的統(tǒng)計(jì)信息過(guò)于陳舊DBlink的優(yōu)化(1)驅(qū)動(dòng)表的選擇:對(duì)于有一個(gè)DBLink的語(yǔ)句,選取遠(yuǎn)程表作為驅(qū)動(dòng)表selectCOMPANY.NamefromCOMPANY,SALES@REMOTE1whereCOMPANY.Company_ID=SALES.Company_IDandSALES.Period_ID=3andSALES.Sales_Total>1000;NESTEDLOOPSREMOTE(TABLEACCESSFULLSALES@REMOTE1)TABLEACCESSBYROWIDCOMPANYINDEXUNIQUESCANCOMPANY_PKDBlink的優(yōu)化(2)多個(gè)DBLink,需要返回大量的記錄,采用Merge可能比NestLoop快select/*+USE_MERGE(COMPANY,SALES)*/COMPANY.NamefromCOMPANY@REMOTE1,SALESwhereCOMPANY.Company_ID=SALES.Company_IDandSALES.Period_ID=3andSALES.Sales_Total>1000;MERGEJOINSORTJOINTABLEACCESSFULLSALESSORTJOINREMOTE(TABLEACCESSFULLCOMPANY@REMOTE1)DBlink的優(yōu)化(3)在同一SQL語(yǔ)句中對(duì)同一個(gè)數(shù)據(jù)庫(kù)的多個(gè)遠(yuǎn)程表進(jìn)行連接,有如下情況:1、如果這個(gè)查詢中既有本地表,又有多個(gè)遠(yuǎn)程表,如果查詢條件是基于運(yùn)程表的過(guò)濾,可以考慮在遠(yuǎn)端數(shù)據(jù)庫(kù)中建立一個(gè)View,這個(gè)View基于參與操作的表,然后在本地建立一個(gè)同義詞對(duì)應(yīng)這個(gè)運(yùn)端的View。這樣可以大大減少網(wǎng)絡(luò)的IO。View操作產(chǎn)生的結(jié)果(不多)與本地表進(jìn)行連接,加快速度。如果所有的表是遠(yuǎn)端表,這樣做的效果不明顯,因?yàn)檎Z(yǔ)句都是在遠(yuǎn)端執(zhí)行,最終的結(jié)果才返回到本地。存在性檢驗(yàn)的優(yōu)化適用場(chǎng)合:對(duì)于利用In,NotIn的語(yǔ)句,一般來(lái)說(shuō)都可以用Exist,NotExist來(lái)代替,用哪一個(gè),決定于哪一個(gè)的執(zhí)行效率高,IO?。贿@兩種語(yǔ)法的互相代替可以減少全表掃描和操作決數(shù),有效提高處理時(shí)間。In->Exists執(zhí)行計(jì)劃大表操作優(yōu)化問題防止沒有效果的索引用到。DBBuffer對(duì)索引取到的數(shù)據(jù)和全表掃描取到的數(shù)據(jù)內(nèi)存使用策略不同。創(chuàng)建分區(qū)及分區(qū)索引,在S
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ī)療衛(wèi)生改革方案研究
- Java程序設(shè)計(jì)技術(shù)規(guī)范及要點(diǎn)
- 2026年人際溝通技巧有效溝通策略題庫(kù)
- 2026年客戶服務(wù)團(tuán)隊(duì)溝通與問題解決能力測(cè)試
- 2026年英語(yǔ)口語(yǔ)與聽力進(jìn)階訓(xùn)練試題集
- 2026年藝術(shù)學(xué)院入學(xué)模擬試題集
- 2026年建筑設(shè)計(jì)師專業(yè)水平認(rèn)證題庫(kù)
- 2026年市場(chǎng)營(yíng)銷專業(yè)考試案例分析題集
- 2026年市場(chǎng)營(yíng)銷經(jīng)理市場(chǎng)分析試題
- 2026年品牌營(yíng)銷總監(jiān)晉升執(zhí)行副總裁實(shí)務(wù)題庫(kù)
- 2026年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)民間美術(shù)文化遺產(chǎn)行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 2026西藏自治區(qū)教育考試院招聘非編工作人員11人備考考試試題及答案解析
- 江西省南昌市2025-2026學(xué)年上學(xué)期期末八年級(jí)數(shù)學(xué)試卷(含答案)
- 2026內(nèi)蒙古鄂爾多斯市伊金霍洛旗九泰熱力有限責(zé)任公司招聘熱電分公司專業(yè)技術(shù)人員16人筆試模擬試題及答案解析
- 2025至2030中國(guó)現(xiàn)代物流業(yè)智慧化轉(zhuǎn)型與多式聯(lián)運(yùn)體系構(gòu)建研究報(bào)告
- 馬年猜猜樂(猜地名)打印版
- 2026江蘇省人民醫(yī)院消化內(nèi)科工勤人員招聘2人考試備考題庫(kù)及答案解析
- 《大學(xué)生創(chuàng)新創(chuàng)業(yè)指導(dǎo)(慕課版第3版)》完整全套教學(xué)課件-1
- 2025年浙江省嘉興市嘉善縣保安員考試真題附答案解析
- AFP急性弛緩性麻痹培訓(xùn)課件
- GDPR框架下跨境醫(yī)療數(shù)據(jù)治理策略
評(píng)論
0/150
提交評(píng)論