影響數(shù)據(jù)庫(kù)性能的根源:
1,磁盤(pán)I/O讀取
2,CPU使用率
3,資源競(jìng)爭(zhēng)
優(yōu)化的方式:
1,設(shè)計(jì)優(yōu)化
2,操作優(yōu)化
3,使用其他優(yōu)化技術(shù)
1)設(shè)計(jì)優(yōu)化:
分類(lèi)拆分?jǐn)?shù)據(jù)量大的表;
選取最適用的字段屬性;
索引設(shè)計(jì),為經(jīng)常查詢(xún)用到的字段建立索引,避免查詢(xún)時(shí)查找其他重復(fù)無(wú)用的數(shù)據(jù),避免了大范圍掃描;
2)操作優(yōu)化:
鎖表操作;
盡量避免子查詢(xún),將子查詢(xún)轉(zhuǎn)化成連接查詢(xún);
where子句查詢(xún)條件盡量少使用運(yùn)算操作;
A>2與A>=3的效果有很大的區(qū)別了,因?yàn)锳>2時(shí)數(shù)據(jù)庫(kù)會(huì)先找出為2的記錄索引再進(jìn)行比較,而A>=3時(shí)ORACLE則直接找到=3的記錄索引;
a is not null 改為 a>0 或a>''等,判斷字段是否為空一般是不會(huì)應(yīng)用索引的;
a<>0 改為 a>0 or a<0 ,不等于操作符是永遠(yuǎn)不會(huì)用到索引的,因此對(duì)它的處理只會(huì)產(chǎn)生全表掃描; YY_BH LIKE '%5400%' 這個(gè)條件會(huì)產(chǎn)生全表掃描,如果改成YY_BH LIKE 'X5400%' OR YY_BH LIKE 'B5400%' 則會(huì)利用YY_BH的索引進(jìn)行兩個(gè)范圍的查詢(xún),性能肯定大大提高;
WHERE后面的條件順序影響 ,應(yīng)該先把范圍小的條件放前面,在小范圍里面按接下來(lái)的條件查找;
3)其他優(yōu)化技術(shù)
使用數(shù)據(jù)緩存技術(shù),如memcached;
使用靜態(tài)存儲(chǔ),對(duì)一些更新不頻繁但經(jīng)常調(diào)用的數(shù)據(jù)采用靜態(tài)文本的存儲(chǔ)方式;