資料庫 oracle 索引

2022-07-03 14:18:11 字數 3081 閱讀 5935

資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度.

例如這樣乙個查詢:select * from table1 where id=10000。如果沒有索引,必須遍歷整個表,直到id等於10000的這一行被找到為止;有了索引之後(必須是在id這一列上建立的索引),在索引中查詢,但索引是經過某種演算法優化過的,查詢次數要少的多的多。可見,索引是用來定位的。

索引分為聚簇索引非聚簇索引兩種,聚簇索引 是按照資料存放的物理位置為順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。

為表設定索引要付出代價的:一是增加了資料庫的儲存空間,二是在插入和修改資料時要花費較多的時間(因為索引也要隨之變動)。第一,建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。第二,索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。第三,當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

索引是建立在資料庫表中的某些列的上面。在建立索引的時候,應該考慮在哪些列上可以建立索引,在哪些列上不能建立索引。一般來說,應該在這些列上建立索引:

在經常需要搜尋的列上,可以加快搜尋的速度;

同樣,對於有些列不應該建立索引。一般來說,不應該建立索引的的這些列具有下列特點:

最普通的情況,是為出現在where子句的字段建乙個索引。為方便講述,先建立乙個如下的表。

create table mytable(

idserial                 primary key,

category_id          int   not null   default0,

user_id                int   not null   default0,

adddate               int   not null   default0

);

如果在查詢時常用類似以下的語句:

select * from mytable where category_id=1;

最直接的應對之道,是為category_id建立乙個簡單的索引:

create index mytable_categoryid on mytable (category_id);

ok.如果有不止乙個選擇條件呢?例如:

select * from mytable where category_id=1 and user_id=2;

第一反應可能是,再給user_id建立乙個索引。不好,這不是乙個最佳的方法。可以建立多重的索引。

建立多個索引:

create index mytable_category id_userid on mytable(category_id,user_id);

格式:

create index 索引名 on 表名(列名)

刪除索引:

drop index index_name [on table_name]

由於oracle中要求索引的名字為唯一的,所以當刪除索引時不必指明表名。對於microsoft access、microsoft sql server和mysql,乙個表中索引名唯一,但在不同的表中可以使用相同的索引名,因此必須指明要刪除的索引的表名.

獲得已經存在的索引:

使用 select * from user_tables 可以查詢出所有的使用者表

使用 select * from user_indexes 可以查詢出所有的使用者表索引

其他:1.檢視所有使用者

select * from all_users;    -------檢視所有的使用者

select * from user_users; --------檢視當前使用者

2.檢視使用者或角色系統許可權:

select * from user_sys_privs; --------檢視當前使用者的許可權

3.檢視角色所包含的許可權

select * from role_sys_privs;   -------

4.檢視使用者物件許可權

select * from all_tab_privs;   --------檢視所用的使用者的可操作表許可權

select * from user_tab_privs; --------檢視當前使用者的錶可操作許可權

5.檢視使用者或角色所擁有的角色

select * from user_role_privs;   ------檢視當前使用者的角色

select * from user_constraints where table_name='?';    -----檢視某乙個表的約束

6.檢視使用者下的索引

1.  select  * from user_indexes-          -----檢視當前使用者下的所有索引

2.  select  * from user_indexes where table_name='a';      -----檢視當前使用者下表a的索引

(drop index index_name去掉索引) 

3. select index_name,index_type,status,blevel from user_indexes where table_name = '?';  

-----檢視某乙個表的所有索引

4.  select table_name, index_name, column_name, column_position from        user_ind_columns where  table_name='?';    ----檢視索引的構成

7. 建索引

create unique clustered index 索引名on 表名(欄位1)  --單索引

create index 索引名 on 表名(欄位1,欄位2)  -------復合索引

Oracle資料庫索引

標籤 資料庫 oracle 索引index 2013 06 14 16 54 4148人閱讀收藏 舉報 database 6 目錄 索引基本概念 索引的作用 索引的架構 oracle索引的型別 1 基於函式的索引 2 位圖索引 oracle索引的實現 索引是用於加速資料訪問的資料物件,合理的使用索引...

Oracle資料庫 索引

索引通過指標的形式提高資料查詢的速度。如果乙個資料量比較大的資料庫經常被查詢而插入刪除的次數較少,則應該建立索引,相反,小表或經常被插入或修改,則不建議建立索引。1.建立索引 create index emp phone number ix on employees phone number 2.建...

Oracle資料庫 索引

索引是定義在儲存表基礎之上,有助於無需檢查所有記錄而快速定位所需記錄的一種輔助儲存結構,由一系列儲存在磁碟上的索引項 index entries 組成,每個索引項又由兩部分構成 索引字段 由table中某些列 通常是一列 中的值串接而成,索引中通常儲存了索引欄位的每乙個值 也有例外 索引字段類似於詞...