以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資料庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排 列。當你問到關於主鍵和外來鍵的問...