一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

數(shù)據(jù)庫優(yōu)化

 賈朋亮博客 2014-03-23

D1 業(yè)務(wù)邏輯 (影響最大)比如不要多次調(diào)用數(shù)據(jù)庫,不要循環(huán)里調(diào)用,多用緩存,
D2 數(shù)據(jù)設(shè)計(jì) (表結(jié)構(gòu)設(shè)計(jì),數(shù)據(jù)建模) 范式,第一范式:無重復(fù)的列;第二范式:有一個(gè)主鍵列,非主屬性要完全依賴于主鍵;第三范式:屬性不依賴于其它非主屬性(一個(gè)表里的非主屬性不再其他表里列出,避免重復(fù)。)
D3 應(yīng)用程序設(shè)計(jì) (SQL 語句的寫法) SQL 寫法優(yōu)化
D4 數(shù)據(jù)庫的邏輯結(jié)構(gòu) (索引,區(qū)間,段,表空間)
D5 數(shù)據(jù)庫操作 (參數(shù)和配置)
D6 訪問路徑
D7 內(nèi)存分配情況
D8 I/O 和物理設(shè)計(jì) (DBA 與業(yè)務(wù)溝通)(峰值多大,使用周期)
D9 資源的征用
D10 操作系統(tǒng)的調(diào)節(jié)

D1-D3 影響最大但比較難修改 (事先去做)
D4-D9 性能影響不是最大但經(jīng)常去做的(DBA)
D10 手段不是很多

可以看出D1-D3都是和程序員相關(guān)的,這也正合我以前的想法------良好的程序,業(yè)務(wù)邏輯設(shè)計(jì)是最好的調(diào)優(yōu)。其他的數(shù)據(jù)庫系統(tǒng)都為我們做的差不多了

 

D3 SQL 優(yōu)化

1Exists,in選擇 ;in 后面跟靜態(tài)的代碼的話,速度很快,跟變化的東西得話,會(huì)慢。

 not in  是強(qiáng)列不推薦使用的,因?yàn)樗荒軕?yīng)用表的索引。用NOT EXISTS 方案代替。

2.1使用預(yù)編譯PreparedStatement

2.2使用重復(fù)完全一樣的SQL,同一功能同一性能不同寫法SQL的影響。

如一個(gè)SQL在A程序員寫的為  Select * from zl_yhjbqk

B程序員寫的為 Select * from dlyx.zl_yhjbqk(帶表所有者的前綴)

C程序員寫的為 Select * from DLYX.ZLYHJBQK(大寫表名)

D程序員寫的為 Select *  from DLYX.ZLYHJBQK(中間多了空格)

以上四個(gè)SQL在ORACLE分析整理之后產(chǎn)生的結(jié)果及執(zhí)行的時(shí)間是一樣的,但是從ORACLE共享內(nèi)存SGA的原理,可以得出ORACLE對(duì)每個(gè) SQL 都會(huì)對(duì)其進(jìn)行一次分析,并且占用共享內(nèi)存,如果將SQL的字符串及格式寫得完全相同,則ORACLE只會(huì)分析一次,共享內(nèi)存也只會(huì)留下一次的分析結(jié)果,這 不僅可以減少分析SQL的時(shí)間,而且可以減少共享內(nèi)存重復(fù)的信息,ORACLE也可以準(zhǔn)確統(tǒng)計(jì)SQL的執(zhí)行頻率。

3盡量不用*

4.分頁sql ,一級(jí)查詢就盡量多排出。
一般的分頁sql如下所示:
sql1:select * from (select t.*,rownum rn from XXX t)where rn>0 and rn <10;
sql2:select * from (select t.*,rownum rn from XXX t where rownum <10)where rn>0;
乍看一下沒什么區(qū)別,實(shí)際上區(qū)別很大...125萬條數(shù)據(jù)測(cè)試,
sql1平均需要1.25秒(咋這么準(zhǔn)呢? )
sql2平均需要... 0.07秒
原因在于,子查詢中,sql2排除了10以外的所有數(shù)據(jù)

5.能用一句sql,千萬別用2句sql ,可以用union關(guān)鍵字來組成自己想要的表返回。

6.IS NULL 或IS NOT NULL操作(判斷字段是否為空)

判斷字段是否為空一般是不會(huì)應(yīng)用索引的,因?yàn)樗饕遣凰饕罩档摹?/p>

推薦方案:用其它相同功能的操作運(yùn)算代替,如:a is not null 改為 a>0 或a>’’等。不允許字段為空,而用一個(gè)缺省值代替空值,如申請(qǐng)中狀態(tài)字段不允許為空,缺省為申請(qǐng)。

7.> 及 < 操作符(大于或小于操作符)

大于或小于操作符一般情況下是不用調(diào)整的,因?yàn)樗兴饕蜁?huì)采用索引查找,但有的情況下可以對(duì)它進(jìn)行優(yōu)化,如一個(gè)表有100萬記錄,一個(gè)數(shù)值型字段 A,30萬記錄的A=0,30萬記錄的A=1,39萬記錄的A=2,1萬記錄的A=3。那么執(zhí)行A>2與A>=3的效果就有很大的區(qū)別了,因 為A>2時(shí)ORACLE會(huì)先找出為2的記錄索引再進(jìn)行比較,而A>=3時(shí)ORACLE則直接找到=3的記錄索引。

8.LIKE操作符

LIKE操作符可以應(yīng)用通配符查詢,里面的通配符組合可能達(dá)到幾乎是任意的查詢,但是如果用得不好則會(huì)產(chǎn)生性能上的問題,如LIKE ‘%5400%’ 這種查詢不會(huì)引用索引,而LIKE ‘X5400%’則會(huì)引用范圍索引。

一個(gè)實(shí)際例子:用YW_YHJBQK表中營(yíng)業(yè)編號(hào)后面的戶標(biāo)識(shí)號(hào)可來查詢營(yíng)業(yè)編號(hào) YY_BH LIKE ‘%5400%’ 這個(gè)條件會(huì)產(chǎn)生全表掃描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 則會(huì)利用YY_BH的索引進(jìn)行兩個(gè)范圍的查詢,性能肯定大大提高。

9.UNION操作符

UNION在進(jìn)行表鏈接后會(huì)篩選掉重復(fù)的記錄,所以在表鏈接后會(huì)對(duì)所產(chǎn)生的結(jié)果集進(jìn)行排序運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果。實(shí)際大部分應(yīng)用中是不會(huì)產(chǎn)生重復(fù)的記錄,最常見的是過程表與歷史表UNION。如:
select * from gc_dfys
union
select * from ls_jg_dfys
這個(gè)SQL在運(yùn)行時(shí)先取出兩個(gè)表的結(jié)果,再用排序空間進(jìn)行排序刪除重復(fù)的記錄,最后返回結(jié)果集,如果表數(shù)據(jù)量大的話可能會(huì)導(dǎo)致用磁盤進(jìn)行排序。

推薦方案:采用UNION ALL操作符替代UNION,因?yàn)閁NION ALL操作只是簡(jiǎn)單的將兩個(gè)結(jié)果合并后就返回。

10.WHERE后面的條件順序影響

WHERE子句后面的條件順序?qū)Υ髷?shù)據(jù)量表的查詢會(huì)產(chǎn)生直接的影響。如:
Select * from zl_yhjbqk where dy_dj = '1KV以下' and xh_bz=1
Select * from zl_yhjbqk where xh_bz=1 and dy_dj = '1KV以下'
以 上兩個(gè)SQL中dy_dj(電壓等級(jí))及xh_bz(銷戶標(biāo)志)兩個(gè)字段都沒進(jìn)行索引,所以執(zhí)行的時(shí)候都是全表掃描,第一條SQL的dy_dj = '1KV以下'條件在記錄集內(nèi)比率為99%,而xh_bz=1的比率只為0.5%,在進(jìn)行第一條SQL的時(shí)候99%條記錄都進(jìn)行dy_dj及xh_bz的 比較,而在進(jìn)行第二條SQL的時(shí)候0.5%條記錄都進(jìn)行dy_dj及xh_bz的比較,以此可以得出第二條SQL的CPU占用率明顯比第一條低。

 

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    亚洲精品国产主播一区| 国产精品免费不卡视频| 国产精品二区三区免费播放心| 国产精品日本女优在线观看| 久久中文字幕中文字幕中文| 欧美日韩免费观看视频| 99久只有精品免费视频播放| 国产又色又爽又黄又大| 久久精品蜜桃一区二区av| 黄色污污在线免费观看| 男女午夜福利院在线观看| 午夜精品国产精品久久久| 日韩欧美综合中文字幕| 国产欧美日韩精品成人专区| 99久久人妻精品免费一区| 国产又爽又猛又粗又色对黄| 国产欧洲亚洲日产一区二区| 开心激情网 激情五月天| 国产亚洲精品俞拍视频福利区 | 在线免费看国产精品黄片| 中文字幕在线区中文色| 婷婷基地五月激情五月| 免费午夜福利不卡片在线 视频| 国产精品成人免费精品自在线观看 | 欧美又黑又粗大又硬又爽| 91免费一区二区三区| 亚洲一区精品二人人爽久久| 偷拍偷窥女厕一区二区视频| 午夜福利在线观看免费| 国产一级特黄在线观看| 日本一二三区不卡免费| 青青操日老女人的穴穴 | 日韩一级一片内射视频4k| 国内真实露脸偷拍视频| 国产综合香蕉五月婷在线| 欧美三级大黄片免费看| 好吊妞在线免费观看视频| 91麻豆视频国产一区二区| 精品国产日韩一区三区| 十八禁日本一区二区三区| 内用黄老外示儒术出处|