Oracle數(shù)據(jù)庫性能由SQL語句執(zhí)行效率決定
Oracle數(shù)據(jù)庫性能由什么決定呢?Oracle數(shù)據(jù)庫性能最終由SQL語句執(zhí)行效率決定,可見Oracle數(shù)據(jù)庫性能的提升和SQL語句的優(yōu)化事分不開的。
應(yīng)用程序的執(zhí)行最終將歸結(jié)為數(shù)據(jù)庫中的SQL語句執(zhí)行,SQL語句消耗了70%到90%的數(shù)據(jù)庫資源。因此SQL語句的執(zhí)行效率最終決定了ORACLE數(shù)據(jù)庫的性能。許多程序員認(rèn)為查詢優(yōu)化是DBMS(數(shù)據(jù)庫管理系統(tǒng))的任務(wù),與程序員所編寫的SQL語句關(guān)系不大,這是錯(cuò)誤的。一個(gè)好的查詢計(jì)劃往往可以使程序性能提高數(shù)十倍。另外,SQL語句獨(dú)立于程序設(shè)計(jì)邏輯,相對(duì)于對(duì)程序源代碼的優(yōu)化,對(duì)SQL語句的優(yōu)化在時(shí)間成本和風(fēng)險(xiǎn)上的代價(jià)都很低。
SQL優(yōu)化的主要途徑是:
a.有效索引的建立。在經(jīng)常進(jìn)行連接,但是沒有指定為外鍵的列上建立索引;在頻繁進(jìn)行排序或分組(即進(jìn)行g(shù)roup by 或 order by 操作)的列上建立索引;在條件表達(dá)式中經(jīng)常用到的不同值較多的列上建立檢索,在不同值少的列上不要建立索引;如果待排序的列有多個(gè),可以在這些列上建立復(fù)合索引(compound index)。
為了降低I/O竟?fàn)? 索引要建在與用戶表空間不在同一磁盤上的索引空間里。索引分為:分區(qū)索引、完全索引、***索引、位圖索引等幾種類型,在建立索引前,應(yīng)該測(cè)量這個(gè)索引的選擇性,索引的選擇性是指索引列里不同值的數(shù)目與表中記錄數(shù)的比。
b.在有大量重復(fù)值并且經(jīng)常有范圍查詢(例如 between,>,<>=,<=)的列,或是用到order by、group by的列,可考慮建立群集索引 ;
c.要經(jīng)常同時(shí)存取多列,目每列都含有重復(fù)值可考慮建立組合索引
d.優(yōu)化表達(dá)式,在能使用范圍查詢時(shí)盡可能使用范圍索引, 而少用“like”,因?yàn)?ldquo;LIKE”關(guān)鍵字支持的通配符匹配特別耗費(fèi)時(shí)間。
f.使用Oracle語句優(yōu)化器(oracle optimizer)和行鎖管理器(row-level manager)來調(diào)整優(yōu)化SQL語句。
【編輯推薦】