一、建立索引:
create index index_name on table_name(table_field);
二、修改索引:
alter index 索引名 rename to 新索引名
三、刪除索引:
drop index 索引名
四、檢視索引:
<1>.檢視索引個數和類別
select * from user_indexes where table_name='表名' ;
<2>.檢視索引被索引的字段
select * from user_ind_columns where index_name=upper('&index_name');
<3>、查詢出所有的使用者表
select * from user_tables 可以查詢出所有的使用者表
select owner,table_name from all_tables; 查詢所有表,包括其他使用者表
<4>、查詢出使用者所有表的索引
select * from user_indexes
<5>、查詢使用者表的索引(非聚集索引):
select * from user_indexes where uniqueness='nonunique'
<6>、查詢使用者表的主鍵(聚集索引):
select * from user_indexes where uniqueness='unique'
<7>、查詢表的索引
select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name='node'
<8>、查詢表的主鍵
select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'p'
and cu.table_name = 'node'
<9>、查詢表的唯一性約束(包括名稱,構成列):
select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name=au.constraint_name and
cu.table_name='node'
<10>、查詢表的外來鍵
select * from user_constraints c where c.constraint_type = 'r' and c.table_name='staffposition'
查詢外來鍵約束的列名:
select * from user_cons_columns cl where cl.constraint_name = 外來鍵名稱
查詢引用表的鍵的列名:
select * from user_cons_columns cl where cl.constraint_name = 外來鍵引用表的鍵名
五、判斷索引是否被執行:
索引會增加io,增加空間,也會增加一些資料庫的額外開銷,對於沒有用到得索引,應盡量避免不建,建立了的,把沒用的索引根據情況刪除。有唯一約束,主鍵的列不要刪除。建議乙個表的所以在4-5個左右,不要太多,這是乙個參考值,當然還要具體分析,面是判斷的方法:
1,分析索引
alter index index_name monitoring usage;
2,產看,used是否為yes,當然要觀察一段時間才能確定是否被使用。
select table_name,index_name,used from v$object_usage;
這兩條需要一起使用才能看得到使用效果,例如:
alter index index_user monitoring usage;
select table_name,index_name,used from v$object_usage;
六、使用索引注意事項:
《一》、以下的方法會引起索引失效
1,<>
2,單獨的》,<,(有時會用到,有時不會)
3,like "%_" 百分號在前.
4,表沒分析.
5,單獨引用復合索引裡非第一位置的索引列.
6,字元型字段為數字時在where條件裡不新增引號.
7,對索引列進行運算.需要建立函式索引.
8,not in ,not exist.
9,當變數採用的是times變數,而表的字段採用的是date變數時.或相反情況。
10, 索引失效。
11,基於cost成本分析(oracle因為走全表成本會更小):查詢小表,或者返回值大概在10%以上
12,有時都考慮到了 但就是不走索引,drop了從建試試在
13,b-tree索引 is null不會走,is not null會走,位圖索引 is null,is not null 都會走
14,聯合索引 is not null 只要在建立的索引列(不分先後)都會走, in null時 必須要和建立索引第一列一起使用,當建立索引第一位置條件是is null 時,其他建立索引的列可以是is null(但必須在所有列都滿足is null的時候),或者=乙個值;當建立索引的第一位置是=乙個值時,其他索引列可以是任何情況(包括is null =乙個值),以上兩種情況索引都會走。其他情況不會走。
《二》、索引失效解決方法
1. 選用適合的oracle優化器 oracle的優化器共有3種:
a. rule (基於規則) b. cost (基於成本) c. choose (選擇性)。
設定預設的優化器,可以通過對init.ora檔案中optimizer_mode引數的各種宣告,如rule,cost,choose,all_rows,first_rows 。你當然也在sql句級或是會話(session)級對其進行覆蓋。為了使用基於成本的優化器(cbo, cost-based optimizer) , 你必須經常執行analyze 命令,以增加資料庫中的物件統計資訊(object statistics)的準確性。如果資料庫的優化器模式設定為選擇性(choose),那麼實際的優化器模式將和是否執行過analyze命令有關。如果table已經被analyze過, 優化器模式將自動成為cbo , 反之,資料庫將採用rule形式的優化器。
2、重建索引
alter index 索引名 rebuild 【online】
3、強制索引
給該語句加上hint後,強制其使用'record_entityid' 這個索引,sql語句變成這樣引用
select index(record,record_entityid) from record where entityid='24' and entitytype='blog';
index(record,record_entityid) */ 中,index表示強制使用index,record是表名,record_entityid是索引名。其執行計畫跟測試資料庫上一致,都是使用用 'record_entityid' 這個索引,邏輯讀寫同樣為4。後來經過測試,在不加hint的情況下,對該錶和兩個索引執行analyze 後,同樣也能使用 'record_entityid' 這個索引。但是因為該錶更新頗為頻繁,不知道要多久就要再分析一次
Oracle中檢視建立索引和使用索引的注意點
一 檢視和建立索引 select from user indexes where table name student create index i student num on student num 二 使用索引的注意點 型別匹配 若student中num列是varchar型別,語句select...
oracle 建立索引
要在oracle資料庫中使用索引,首先需要建立oracle索引。下面就為您介紹建立oracle索引的方法,希望對您能有所幫助。適當的使用索引可以提高資料檢索速度,可以給經常需要進行查詢的字段建立索引。oracle的索引分為5種 唯一索引,組合索引,反向鍵索引,位圖索引,基於函式的索引 建立oracl...
oracle建立索引
create recreate indexes 建立索引 一張表上建立多個索引,一般是該錶的資料量大,建立索引能夠提高資料庫的select效能。一般是在要select的字段建立索引。oracle建立索引語法 create index indexname on tablename colum crea...