oracle 索引的創建與使用


什么是數據庫索引

在關系數據庫中,索引是一種與表有關的數據庫結構,它可以使對應於表的SQL語句執行得更快。

索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。 

對於數據庫來說,索引是一個必選項,但對於現在的各種大型數據庫來說,索引可以大大提高數據庫的性能,以至於它變成了數據庫不可缺少的一部分。


索引原理

1.  若沒有索引,搜索某個記錄時(例如查找name='wish')需要搜索所有的記錄,因為不能保證只有一個wish,必須全部搜索一遍

2. 若在name上建立索引,oracle會對全表進行一次搜索,將每條記錄的name值哪找升序排列,然后構建索引條目(name和rowid),存儲到索引段中,查詢name為wish時即可直接查找對應地方

3.創建了索引並不一定就會使用,oracle自動統計表的信息后,決定是否使用索引,表中數據很少時使用全表掃描速度已經很快,沒有必要使用索引


索引使用

創建一個測試表

#創建一個測試表
create table cstable (id int,sex char(1),name char(10));

#插入5000萬行測試數據
begin
for i in 1..50000000
loop
insert into cstable values(i,'M','ljy');
end loop;
commit;
end;
/

(1)單一索引

單一索引是指索引列為一列的情況,即新建索引的語句只實施在一列上。

#創建一個單一索引
create index cs_index1 on cstable(id);
注:對表的第一列(id)創建索引。

#查看某一行的數據
select id,sex,name from cstable where id=8888888;
#創建索引前大約16.77秒,創建索引后查找大約0.366秒

(2)復合索引:基於多個列的索引

索引分離於表,作為一個單獨的個體存在,除了可以根據單個字段創建索引,也可以根據多列創建索引。

用戶可以在多個列上建立索引,這種索引叫做復合索引(組合索引)。復合索引的創建方法與創建單一索引的方法完全一樣。

Oracle要求創建索引最多不可超過32列。

create index cs_index2 on cstable(id,sex);
注:對表的列(sex,name)創建索引。

select id,sex,name from cstable order by id,sex;
#創建索引前大約16.77秒,創建索引后查找大約39.366秒(不知道為啥)

(3)創建基於函數的索引

--在cstable表的name列上執行大小寫無關的搜索
CREATE INDEX upper_index3 ON cstable(UPPER(name))

SELECT * FROM cstable WHERE UPPER(name)='LJY'

(4)刪除和修改索引

a.重建索引:如果經常在索引列上執行DML操作,需要定期重建索引
ALTER INDEX cs_index1 REBUILD;

b.刪除索引
DROP INDEX cs_index2;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM