oracle 優化--索引

1、事務sql

一、簡介數據庫

事務是數據處理的核心,是業務上的一個邏輯單元,它可以保證其中對數據全部的操做,要麼所有成功,要麼所有失敗。DBMS經過事務的管理來協調用戶的併發行爲,減小用戶訪問資源的衝突。併發

wKioL1kRQaaQSfveAACABBDw1h0209.png-wh_50

 

1)顯示提交:當事務遇到COMMIT指令時,將結束事務並永久保存全部的更改的數據。oracle

2)顯示回滾:當事務遇到ROLLBACK指令時,也將結束事務的執行,可是此時它回滾全部更改的數據到事務開始時的原始值,即取消更改,數據沒有變化。ide

3)DDL語句:一旦用戶執行了DDL(數據定義語言,如createdrop等)語句,則以前的全部DML(數據操做語言)操做做爲一個事務提交,這種提交稱爲隱示提交。函數

4)正常結束程序:若是oracle數據庫應用程序正常結束,如使用sqlplus工具更改了數據,而正常退出該程序(exit),則oracle自動提交事務。工具

5)非正常地結束程序:當程序崩潰或意外終止時,全部數據更改都被回滾,這種回滾成爲隱示回滾。sqlserver

 

二、事務的特色性能

事務有4個特性,簡寫爲ACID特性。spa

1)原則性:以轉帳操做爲例,轉出帳戶餘額減小和轉入餘額增長是兩個DML語句,可是必須做爲一個不可分割的完整操做。要麼同時成功,要麼同時失敗,只轉出而沒有轉入顯然是不可接受的。

2)一致性:不管是在事務前、事務中、事務後,數據庫始終處於一致的狀態。例如:轉帳前分別是20001000,總金額是3000,轉帳300後分別是17001300,總金額仍是3000.這就叫作一致性。不一致就是在某個時間點查詢到的總金額不是3000.

3)隔離性:在某個時間段,確定有不少人都在轉帳,每一個人的轉帳都是在本身的事務中,因此在一個數據庫中,會有不少事物同時存在。雖然同時存在不少事物,可是事物之間不會相互影響。

4)持久性:若是事物提交成功,則數據修改永遠生效,若是是回滾,則數據徹底沒有沒修改,就至關於沒有這件事情發生。

 

2、索引

 

1.索引是oracle的一個對象,是與表關聯的可選結構,提供了一種快速訪問數據的途徑,提升了數據庫檢索性能。索引使數據庫程序無需對整個表進行掃描,就能夠在其中找到所須要的數據。就像書的目錄,能夠經過目錄快速查找所需信

息,無需閱讀整本書。

 

 

2.、索引的分類

 

1)B樹索引結構

四、建立索引的語法

create [unique] index 索引名稱 on 表名(列名)[tablespace 表空間名稱]

 

解釋:

[unique]用於指定惟一索引,默認狀況下爲非惟一索引

[tablespace]爲索引指定表空間

 

1)建立標準索引

SQL> CREATE INDEX index_name ON tablename(columnname)

     TABLESPACE index_tbs;

2重建索引

SQL> ALTER INDEX index_name REBUILD;

 

合併索引碎片

SQL>ALTER INDEX index_name COALESCE;

 

3刪除索引

SQL> DROP INDEX index_name;

1

1)在僱員表(emp)中,爲僱員名稱(ename)列建立b樹索引。

wKiom1kRQpzyBwvYAAArgtD13K0262.png-wh_50

五、建立惟一索

確保在定義索引的列中沒有重複值

Oracle 自動在表的主鍵列上建立惟一索引

使用CREATE UNIQUE INDEX語句建立惟一索引

語法以下:

SQL> CREATE UNIQUE INDEX index_name

     ON tablename(columnname);

例:在薪水級別(salgrade)表中,爲級別編號grade列建立惟一索引。

wKiom1kRQseT_FpmAAA2OY6Cseo447.png-wh_50

六、反向鍵索引

與常規B樹索引相反,反向鍵索引在保持列順序的同時反轉索引列的字節。反向鍵索引經過反轉索引鍵的數據值,使得索引的修改平均分佈到整個索引樹上。主要應用於所多個實例同時訪問一個數據庫的場景中

 

六、位圖索引

位圖索引適合低於基數的列,即該列的值是有限的幾個。例如:僱員表中的工種(job)列,即使是幾百萬條僱員記錄,工種也是有限的。Job列能夠做爲位圖索引,相似的還有圖書表中的圖書類別列等。

wKioL1kRQxDz0alVAABn_QgHpuM752.png-wh_50

 

位圖索引不直接存儲ROWID,而是存儲字節位到ROWID的映射,減小響應時間,節省空間佔用。位圖索引不該當在頻發發生insertupdatedelete操做的表上使用,這是由於單個位圖索引指向表的不少數據行,當修改索引項時須要將其指向的數據行所有鎖定,這會嚴重下降數據庫的併發處理能力。位圖索引適合用於數據倉庫和決策支持系統中

 

例:在僱員emp表中,爲工種(job)列建立位圖索引。

基本語法:

CREATE BITMAP  INDEX emp_job_bit_idx ON emp(job);

wKioL1kRQ0Czyf1aAAAGpe5zTy8997.png-wh_50

 

六、組合索引
相似sqlserver的複合索引,在表內多列上建立索引。索引中的列沒必要與表中的列順序一致,也沒必要相互鄰接。

 

 

 

六、基於函數的索引

須要建立的索引須要使用表中一列或多列的函數或表達式,也能夠將基於函數的索引建立爲B樹索引或位圖索引。

基本語法:

SQL> CREATE INDEX emp_ename_upper_idx

 

ON tablename (UPPER(columnname));

 

:在僱員(emp)表中,爲僱員名稱(ename)列建立小寫函數索引

wKiom1kRQ5zAvdtoAAAgLYIG83w268.png-wh_50

wKiom1kRQ8DzGtNiAAEURzTg0I0164.png-wh_50

 

六、建立索引的原則

頻繁搜索的列能夠做爲索引列

常常排序,分組的列能夠做爲索引

常常用做鏈接的列(主鍵/外鍵)能夠做爲索引

將索引放在一個單獨的表空間中,不要放在有回退段、臨時段和表的表空間中

對於大型索引而言,考慮使用NOLOGIN子句建立大型索引。

根據業務數據發生頻率,按期從新生成或從新組織索引,進行碎片整理。

相關文章
相關標籤/搜索