Oracle的資料優化 經常被問到 ?

2022-07-11 11:36:10 字數 2232 閱讀 9307

以oracle資料庫舉例:(a-g要求掌握,h一般為dba操作,了解就可以了)

a。建庫:已知將儲存海量資料的時候,因為oracle是通過使用者來管理資料的,

第一步我們先建乙個tableaspace(假設表空間名為test),

然後建立使用者test(一般情況下使用者名稱和表空間同名),

建立的使用者test使用已建立的tablespace(test).

這樣做是避免訪問上產生熱點。

b。建表:建表時最好依照第三正規化去建表(請回答三個正規化),

這樣可以最大程度避免出現資料冗餘、插入、刪除和更新異常,保證資料完整性。

而且表結構合理的情況下,可以加快查詢速度。

c。索引:在經常查詢的字段上面建立索引,

利用index對查詢進行優化,(index可以避免對錶的乙個全面掃瞄)

原理:當以某個字段建立乙個索引的時候,資料庫就會生成乙個索引頁,

索引頁不單如果表的列很少,不適合建索引.單儲存索引的資料,還儲存了索引在資料庫的具體的實體地址,當我們查詢資料時,oracle會先查索引頁,這樣就能夠很快的定位查詢到要找的記錄)。

注意:當執行過多次的insert,delete,update後,會出現索引碎片,影響查詢速度,我們應該對索引進行重組.

d:sql語句的優化:

多使用共享語句盡量使你的sql語句能夠使用索引。

怎樣使sql語句能夠使用到索引呢:

當sql語句中包含not in,<>,is null,is not null,like '%%'的時候不會用索引。

in: in會拆成一堆or的,可以使用表的索引。

not in:強列推薦不使用,因為它不能應用表的索引。

<> 操作符(不等於): 不等於操作符是永遠不會用到索引的,因此對它的處理只會產生全表掃瞄。

優化方案:用其它相同功能的操作運算代替,如a<>0 改為a>0 or a<0;a<>』』 改為a>』』.

is null 或is not null操作(判斷字段是否為空):

判斷字段是否為空一般是不會應用索引的,因為b樹索引(oracle大多是使用b樹索引)是不索引空值的。

優化方案:用其它相同功能的操作運算代替,如a is not null 改為a>0 或a>』』等。

is null 時,用乙個預設值代替空值,例如業擴申請中狀態字段不允許為空,預設為申請。

like:like操作符可以應用萬用字元查詢,裡面的萬用字元組合可能達到幾乎是任意的查詢,但是如果用得不好則會產生效能上的問題,

優化方案:如like 『%001%』 這種查詢不會引用索引,會產生全表掃瞄,

而like 『001%』則會引用範圍索引。進行範圍的查詢,效能肯定大大提高。

e:多表查詢時,一般乙個大表關聯幾個小表,最好不要幾個大表相關聯,那樣也會影響到查詢速度。

f:oralce訪問表中的資料共有三種方式,全表掃瞄,通過索引掃瞄,使用共享語句(一模一樣)。

select id,name from tb_sutdent;

select id,name from tb_sutdent;

我們jdbc查詢中使用preparedstatement實際上就是使用共享語句。

所以我們要多使用共享語句來加快查詢速度。

g:經常查詢的sql可以寫成儲存過程。

h:當表資料達到幾十到幾百gb時,就要考慮對錶進行分割槽了,

分割槽的優點:

1.增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用

2.維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;

3.均衡i/o:可以把不同的分割槽對映到磁碟以平衡i/o,改善整個系統效能;

4.改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。

分割槽的幾種方法:範圍分割槽,hash分割槽(雜湊分割槽) ,復合分割槽。

應用:實際專案中大多使用範圍分割槽,

例如按時間範圍(日期字段)來分割槽,如2005-2006資料作為乙個分割槽,2006-2007作為乙個分割槽。

create table emp(

comm int default 0,

status varchar2(18) default '申請'

);create table tb_emp(

emial varchar2(50) default 'aaa'

);select * from tb_emp where email is null --不使用index

select * from tb_emp where email = 'aaa' --使用index

面試經常被問到的SQL優化

1.不要把select子句寫成 select select from t emp 2.對order by排序的字段設定索引 3.少用is nullselect ename from t emp where comm is null 不使用索引 select ename from t emp wher...

Oracle資料庫經常被鎖,解鎖步驟

用dba角色的使用者登陸,進行解鎖,先設定具體時間格式,以便檢視具體時間 sql alter session set nls date format yyyy mm dd hh24 mi ss session altered.2 檢視具體的被鎖時間 這裡你根據需要,填寫具體的使用者名稱,下面語句的 ...

SQL資料庫應聘人員面試時經常被問的問題

目前在職場中很難找到非常合格的資料庫開發人員。有人說 sql開發是一門語言,它很容易學,但是很難掌握。在面試應聘的sql server資料庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排 列。當你問到關於主鍵和外來鍵的問...