ORACLE建立索引

2021-08-25 10:05:38 字數 3218 閱讀 2545

create index -- 定義乙個新索引

synopsis

create [ unique ] index name on table [ using method ]

( [ opclass ] [, ...] )

[ tablespace tablespace ]

[ where predicate ]描述

create index 在指定的表上構造乙個名為 index_name 的索引。索引主要用來提高資料庫效能。但是如果不恰當的使用將導致效能的下降。

索引的鍵字字段是以欄位名的方式宣告的,或者是可選的寫在乙個圓括弧裡面的表示式。 如果索引方式支援多個字段索引,那麼我們也可以宣告多個字段。

乙個索引字段可以是乙個使用表的行的乙個或多個欄位的數值進行計算的表示式。 整個特性可用於獲取對基本資料某種變形的快速訪問。 比如,乙個在 upper(col) 上的函式索引將允許子句 where upper(col) = 'jim' 使用索引。

postgresql 為從索引提供 b-tree,r-tree,hash(雜湊) 和 gist 索引方法。 b-tree 索引方法是乙個 lehman-yao 高併發 b-trees 的實 現。r-tree 索引方法用 guttman 的二次**演算法實現了標準的 r-trees。 hash(雜湊)索引方法是 litwin 的線性雜湊的乙個實現。 使用者也可以定義它們自己的索引方法,但這個工作相當複雜。

在 where 子句裡用的表示式只能引用下層表的字段,但是它可以使用所有字段,而不僅僅是被索引的字段。 目前,子查詢和聚集表示式也不能出現在where裡。

索引定義裡的所有函式和操作符都必須是immutable,(不變的)也就是說, 它們的結果必須只能依賴於它們的輸入引數,而決不能依賴任何外部的影響(比如另外乙個表的內容或者當前時間)。 這個約束確保該索引的行為是定義完整的。要在乙個索引上使用使用者定義函式,請記住在你建立它的時候把它標記為immutable的函式。

引數unique

令系統檢測當索引建立時(如果資料已經存在)和每次新增資料時表中是否有重複值。 如果插入或更新的值會導致重複的記錄時將生成乙個錯誤。

name

要建立的索引名。這裡不能包含模式名; 索引總是在同乙個模式中作為其父表建立的。

table

要索引的表名(可能有模式修飾)。

method

用於索引的方法的名字。可選的名字是 btree, hash,rtree,和 gist。預設方法是 btree。

column

表的列/欄位名。

expression

乙個基於該錶的乙個或多個欄位的表示式。 這個表示式通常必須帶著圓括弧包圍寫出,如語法中顯示那樣。 不過,如果表示式有函式呼叫的形式,那麼圓括弧可以省略。

opclass

乙個關聯的操作符表。參閱下文獲取細節。

tablespace

建立索引所在的表空間。如果沒有宣告,則使用 default_tablespace 的表空間, 如果 default_tablespace 是空字串,則使用資料庫的預設表空間。

predicate

為乙個部分索引定義約束表示式。

注意參閱 chapter 11 獲取有關何時使用索引,何時不使用索引, 以及它們哪種情況下是有用的資訊。

目前,只有 b-tree 和 gist 索引方法支援多欄位索引。 預設時最多可以宣告 32 個鍵字(這個限制可以在製作 postgresql 時修改)。 目前只有 b-tree 支援唯一索引。

可以為索引的每個列/字段宣告乙個 操作符表。 操作符表標識將要被該索引用於該列/欄位的操作符。 例如, 乙個四位元組整數的 b-tree 索引將使用 int4_ops 表; 這個操作符表包括四位元組整數的比較函式。 實際上,該域的資料型別的預設操作符表一般就足夠了。 某些資料型別有操作符表的原因是,它們可能有多於乙個的有意義的順序。 例如,我們對複數型別排序時有可能以絕對值或者以實部。 我們可以通過為該資料型別定義兩個操作符表,然後在建立索引的時候選擇合適的表來實現。 有關操作符表更多的資訊在 section 11.8 和 section 32.14 裡。

使用 drop index 刪除乙個索引。

預設時索引不會用於 is null 子句。這種場合下使用索引的最好方法是用 is null 謂詞建立乙個部分索引。

例子在表films上的 title欄位建立乙個 b-tree 索引:

create unique index title_idx on films (title);

在表 films 的字段 code 上建立乙個索引, 並且讓索引存在於表空間 indexspace上:

create index code_idx on films(code) tablespace indexspace;

alter index

name

alter index -- 改變乙個索引的定義

synopsis

alter index name rename to new_name

alter index name set tablespace tablespace_name描述

alter index 改變乙個現有索引的定義。 它有幾種子形式:

rename

rename 形式改變索引的名字。對儲存的資料沒有影響。

set tablespace

這種形式改變索引的表空間為指定表空間,並且把索引相關的資料檔案移動到新的表空間裡。 又見 create tablespace。

引數name

要修改的索引的名字(可以有模式修飾)。

new_name

索引的新名字。

new_owner

索引的新所有者的使用者名稱。

tablespace_name

索引將移動到的表空間的名字。

注意這些操作也可以用 alter table 進行。 alter index 實際上只是 alter table 應用於索引的形式的乙個別名。

以前還有乙個 alter index owner 變種, 但是現在忽略了(帶乙個警告)。乙個索引不能有乙個和其表的主人不同的所有者。 改變該錶的所有者自動改變索引的所有者。

修改任何系統表索引的部分都是不允許的。

例子重新命名乙個現有的索引:

alter index distributors rename to suppliers;

把乙個索引移動到另外乙個表空間:

alter index distributors set tablespace fasttablespace;

oracle 建立索引

要在oracle資料庫中使用索引,首先需要建立oracle索引。下面就為您介紹建立oracle索引的方法,希望對您能有所幫助。適當的使用索引可以提高資料檢索速度,可以給經常需要進行查詢的字段建立索引。oracle的索引分為5種 唯一索引,組合索引,反向鍵索引,位圖索引,基於函式的索引 建立oracl...

oracle建立索引

create recreate indexes 建立索引 一張表上建立多個索引,一般是該錶的資料量大,建立索引能夠提高資料庫的select效能。一般是在要select的字段建立索引。oracle建立索引語法 create index indexname on tablename colum crea...

oracle建立索引

建立乙個使用者 set sqlprompt user create user jsx identified by 123 建立使用者jsx grant all privileges to jsx 給使用者授權 conn jsx 123 建立books表 create table books book...