SQL语言之索引(Oracle)
索引(index)
?在關(guān)系型數(shù)據(jù)庫中,索引是一種單獨(dú)的、物理的對(duì)數(shù)據(jù)庫表中的一列或多列的值進(jìn)行排序的一種存儲(chǔ)結(jié)構(gòu),他是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí),這些值的數(shù)據(jù)頁的邏輯指針清單。索引的作用相當(dāng)于圖書的目錄,可以根據(jù)目錄的頁碼快速找到所需的內(nèi)容;
?索引提供對(duì)表中行的直接和快速訪問,他的目的是用已索引的路徑快速定位數(shù)據(jù)以減少磁盤I/O。索引有Oracle服務(wù)器自動(dòng)使用和維護(hù),索引邏輯地和物理地獨(dú)立于他們所索引的表,這意味著索引可以在任何時(shí)候被創(chuàng)建或刪除,并且不影響基表或其他的索引。當(dāng)刪除表時(shí),相應(yīng)的索引也被刪除;
一、索引類型
?唯一性索引
當(dāng)在一個(gè)表中定義一個(gè)例為主鍵,或者定義一個(gè)唯一約束時(shí)Oracle服務(wù)器 自動(dòng)創(chuàng)建該索引,所有的名字習(xí)慣上是約束的名字;
?非唯一性索引
由用戶創(chuàng)建,例:可以創(chuàng)建一個(gè)foreign key列索引用于一個(gè)查詢中的鏈接來改 進(jìn)數(shù)據(jù)取回的速度;
二、創(chuàng)建索引的方式
?自動(dòng)
在一個(gè)表的定義中,當(dāng)定義一個(gè)primary key或unique約束時(shí),一個(gè)唯一索引 被自動(dòng)創(chuàng)建;
?手動(dòng)
用戶能夠在列上創(chuàng)建非唯一的索引來加速對(duì)行的訪問;
三、使用索引
?過多也是件壞事
在表上建立更多的索引并不意味著更快地查詢,在帶索引的表上被提交的每個(gè) DML操作意味著索引必須更新;與表連接的索引越多,對(duì)Oracle數(shù)據(jù)庫的影 響越大,Oracle數(shù)據(jù)庫在每次DML操作之后必須更新所有的索引;
?什么時(shí)候創(chuàng)建索引
1.一個(gè)列包含一個(gè)大范圍的值;
2.一個(gè)列包含很多的空值;
3.一個(gè)或多個(gè)列經(jīng)常同時(shí)在一個(gè)where子句中或一個(gè)連接條件中被使用
4.表很大,并且經(jīng)常的查詢期望取回少于百分之2到4的行;
?什么時(shí)候不創(chuàng)建索引
1.表很小;
2.不經(jīng)常在查詢中作為條件使用的列;
3.大多數(shù)查詢期望取回多于表中百分之2到4的行;
4.表經(jīng)常被更新;
5.被索引的列作為表達(dá)式的一部分被引用;
?操作索引
1.非唯一性索引的類型
單行索引,復(fù)合索引(組合索引),函數(shù)索引;
2.創(chuàng)建索引的語法
3.創(chuàng)建單行索引
例
為 employees 表中的 last_name 創(chuàng)建一個(gè)索引并命名為 emp_index。 Create index emp_index on employees(last_name);4.創(chuàng)建復(fù)合索引
例
為 departments 表 創(chuàng) 建 一 個(gè) 包 括 manager_id 與 location_id 復(fù) 合 索 引 并 命 名 為dept_man_loc。 Create index dept_man_loc on departments(manager_id , location_id);5.創(chuàng)建函數(shù)索引
例
為 departments 表中的 department_name 創(chuàng)建一個(gè)帶有大寫函數(shù)的索 引 dept_upper2。 Create index dept_upper2 on departments(upper(department_name));6.查詢索引
Column_position索引的位置
Uniqueness 索引唯一的名字
例
查詢departments表的索引名字,所在列的名字,列的位置,唯一的 名字 Select ix.index_name , ic.column_name , ic.column_position , ix.uniqueness from user_indexes ix , user_ind_columns ic where ix.index_name = ic.index_name and ic.table_name=’DEPARTMENTS’;7.刪除索引
例
刪除名稱為dept_upper 的索引; Drop index dept_upper ;總結(jié)
以上是生活随笔為你收集整理的SQL语言之索引(Oracle)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL语言之序列(Oracle)
- 下一篇: SQL语言之同义词(Oracle)