(1)創建表時,不能在同一個字段上建立兩個索引(主鍵默認建立唯一索引),在需要經常查詢的字段上建立索引(如:deal_id已經是主鍵,不能再次執行:create index tmp_table_index on tmp_table(deal_id),會報錯);
a) 主鍵:該字段沒有重複值,且不允許爲空
惟一索引:該字段沒有重複值,但允許空值(該字段可以有多個null值)
一張table只允許一個主鍵,但可以創建多個unique index
比如,表中有5行,ID的值是 1 2 3 4 5,就可以作爲主鍵
但如果ID的值是 1 2 3 4 NULL NULL,則可以建立惟一索引,不能作爲主鍵
可以爲多個字段建立唯一索引:
create unique index unique_index01 on search_result_tmp(deal_id,compare_flag);
建立唯一索引以後,只允許插入一條如下記錄,插入兩條時會違反unique index約束
Insert into search_result_temp values(1,null);
(2)刪除索引:drop index unique_index01;
(3)函數索引
如果在我們的查詢條件使用了函數,那麼索引就不可用了。
可以用建立函數索引的方式,來解決這個問題
例如:
select * from product where nvl(price,0.0)>1000.0 ;
這裏,nvl(price,0.0)使用了函數,索引不能利用price字段上做的索引了
ok,我們來創建函數索引
create index index_price on product(nvl(price,0.0));
(4)其他:
唯一索引能極大的提高查詢速度,而且還有唯一約束的作用
一般索引,只能提高30%左右的速度
經常插入,修改,應在查詢允許的情況下,儘量減少索引,因爲添加索引,插入,修改等操作,需要更多的時間