資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度.
例如這樣乙個查詢: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中某些列 通常是一列 中的值串接而成,索引中通常儲存了索引欄位的每乙個值 也有例外 索引字段類似於詞...