? ? ? ? 個(gè)人理解,數(shù)據(jù)庫性能最關(guān)鍵的因素在于 IO ,因?yàn)椴僮鲀?nèi)存是快速的,但是讀寫磁盤是速度很慢的,優(yōu)化數(shù)據(jù)庫最關(guān)鍵的問題在于減少磁盤的 IO ,就個(gè)人理解應(yīng)該分為物理的和邏輯的優(yōu)化,?物理的是指 oracle 產(chǎn)品本身的一些優(yōu)化,邏輯優(yōu)化是指應(yīng)用程序級別的優(yōu)化物理優(yōu)化的一些原則:
???1)、?Oracle 的運(yùn)行環(huán)境(網(wǎng)絡(luò),硬件等)
???2)、使用合適的優(yōu)化器
???3)、合理配置 oracle 實(shí)例參數(shù)
???4)、建立合適的索引(減少 IO )
???5)、?將索引數(shù)據(jù)和表數(shù)據(jù)分開在不同的表空間上(降低 IO 沖突)
???6)、建立表分區(qū),將數(shù)據(jù)分別存儲在不同的分區(qū)上(以空間換取時(shí)間,減少 IO )
邏輯上優(yōu)化:
???1)、可以對表進(jìn)行邏輯分割,如中國移動(dòng)用戶表,可以根據(jù)手機(jī)尾數(shù)分成 10 個(gè)表,這樣 對性能會有一定的作用
???2)、Sql 語句使用占位符語句,并且開發(fā)時(shí)候必須按照規(guī)定編寫 sql 語句(如全部大寫, 全部小寫等) oracle 解析語句后會放置到共享池中, ?如:?
? ? ? ? ? ? ? ? ? select?*?from?Emp?where?name=?? 這個(gè)語句只會在共享池中有一條,而如果是字 符串的話,那就根據(jù)不同名字存在不同的語句,所以占位符效率較好
???3)、?數(shù)據(jù)庫不僅僅是一個(gè)存儲數(shù)據(jù)的地方,同樣是一個(gè)編程的地方,一些耗時(shí)的操作, 可以通過存儲過程等在用戶較少的情況下執(zhí)行,從而錯(cuò)開系統(tǒng)使用的高峰時(shí)間,提 高數(shù)據(jù)庫性能
???4)、盡量不使用 * 號,如 select?*?from?Emp ,因?yàn)橐D(zhuǎn)化為具體的列名是要查數(shù)據(jù)字典, ?比較耗時(shí)
???5)、?選擇有效的表名
?????????對于多表連接查詢,可能 oracle 的優(yōu)化器并不會優(yōu)化到這個(gè)程度,? oracle? 中多表 查詢是根據(jù) FROM 字句從右到左的數(shù)據(jù)進(jìn)行的,那么最好右邊的表(也就是基礎(chǔ)表)選 ?擇數(shù)據(jù)較少的表,這樣排序更快速,如果有 link 表(多對多中間表),那么將 link 表放 最右邊作為基礎(chǔ)表,在默認(rèn)情況下 oracle 會自動(dòng)優(yōu)化,但是如果配置了優(yōu)化器的情況下, 可能不會自動(dòng)優(yōu)化,所以平時(shí)最好能按照這個(gè)方式編寫 sql
??6)、?Where 字句規(guī)則 :
???????Oracle? 中 Where 字句時(shí)從右往左處理的,表之間的連接寫在其他條件之前,能過濾 掉非常多的數(shù)據(jù)的條件,放在 where 的末尾,?另外 != 符號比較的列將不使用索引,列 經(jīng)過了計(jì)算(如變大寫等)不會使用索引(需要建立起函數(shù)),? is?null 、 is?not?null 等優(yōu) 化器不會使用索引
??7)、?使用 Exits?Not?Exits? 替代? In?Not?in
??8)、合理使用事務(wù),合理設(shè)置事務(wù)隔離性,數(shù)據(jù)庫的數(shù)據(jù)操作比較消耗數(shù)據(jù)庫資源的,盡 量使用批量處理,以降低事務(wù)操作次數(shù)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
