歡迎來到愛書不愛輸?shù)某绦蛟车牟┛? 本博客致力于知識分享,與更多的人進(jìn)行學(xué)習(xí)交流
本文免費(fèi)學(xué)習(xí),自發(fā)文起3天后,會收錄于
SQL應(yīng)知應(yīng)會專欄,本專欄主要用于記錄對于數(shù)據(jù)庫的一些學(xué)習(xí),有基礎(chǔ)也有進(jìn)階,有MySQL也有Oracle
前言
?今天繼續(xù)
SQL的索引
的第4
篇文章,主要講到了Oracle的索引:從有哪些索引出發(fā),到索引的使用原則,針對每種索引進(jìn)行創(chuàng)建演示,最后是分區(qū)索引的認(rèn)識和使用
??文章中提供了代碼和很具體的截圖,代碼是為了減輕大家學(xué)習(xí)的難度,同時(shí)用截圖可以更形象的讓大家去理解知識點(diǎn)想要表達(dá)的意思,希望大家跟著一起學(xué)起來
??希望文章的內(nèi)容對大家有所幫助,如果有什么不足的地方,大家可以在評論區(qū)或者私信我,感謝大家的支持
??那么,快拿出你的電腦,跟著文章一起學(xué)習(xí)起來吧
一、Oracle索引
1.索引概述及分類
-
索引是一種提高數(shù)據(jù)檢索效率的數(shù)據(jù)庫對象, 能夠?yàn)閿?shù)據(jù)的查詢提供快捷的存取路徑, 減少磁盤 I/O。
-
雖然索引是基于表而建立的, 但索引并不依賴于表。
-
索引由系統(tǒng)自動維護(hù)和使用,不需要用戶參與。
-
Oracle 數(shù)據(jù)庫為了提高數(shù)據(jù)檢索性能, 提供了多種類型的索引, 以滿足不同的應(yīng)用需求。
B-樹索引
- 按平衡樹結(jié)構(gòu)組織的索引, 是最常用的索引, 也是默認(rèn)創(chuàng)建的索引類型。
- B-樹索引占用空間多, 適合索引值取值范圍廣( 基數(shù)大) 、 重復(fù)率低的應(yīng)用。
位圖索引
- 按位圖結(jié)構(gòu)組織的索引, 適合索引值取值范圍?。?基數(shù)?。?, 重復(fù)率高的應(yīng)用。
函數(shù)索引
- 基于包含索引列的函數(shù)或表達(dá)式創(chuàng)建的索引( 索引值為計(jì)算后的值)。
唯一性索引與非唯一性索引
- 唯一性索引是索引值不重復(fù)的索引, 非唯一性索引是索引值可以重復(fù)的索引。 在默認(rèn)情況下, Oracle 創(chuàng)建的索引是非唯一性索引。 當(dāng)在表中定義主鍵約束或唯一性約束時(shí), Oracle 會自動在相應(yīng)列上創(chuàng)建唯一性索引。
單列索引與復(fù)合索引
- 索引可以創(chuàng)建在一個(gè)列上, 也可以創(chuàng)建在多個(gè)列上。 創(chuàng)建在一個(gè)列上的索引稱為單列索引, 創(chuàng)建在多個(gè)列上的索引稱為復(fù)合索引。
2. 索引使用原則
由于索引作為一個(gè)獨(dú)立的數(shù)據(jù)庫對象存在, 占用存儲空間, 并且需要系統(tǒng)進(jìn)行維護(hù), 因此索引的使用需要遵循下列原則:
-
導(dǎo)入數(shù)據(jù)后再創(chuàng)建索引
-
在適當(dāng)?shù)谋砗土猩蟿?chuàng)建適當(dāng)?shù)乃饕?/p>
- 如果經(jīng)常查詢的記錄數(shù)目少于表中記錄總數(shù)的5%時(shí)就應(yīng)當(dāng)創(chuàng)建索引;
- 如果經(jīng)常進(jìn)行連接, 應(yīng)該在連接列上建立索引;
- 對于取值范圍很大的列應(yīng)當(dāng)創(chuàng)建 B 樹索引, 而對于取值范圍很小的列應(yīng)當(dāng)創(chuàng)建位圖索引
-
合理設(shè)置復(fù)合索引中列的順序, 應(yīng)將頻繁使用的列放在其他列的前面
-
限制表中索引的數(shù)目。 表中索引數(shù)目越多, 查詢速度越快, 但表的更新速度越慢
-
選擇存儲索引的表空間。 在默認(rèn)情況下, 索引與表存儲在同一表空間中【MySQL的MyISAM引擎是索引與數(shù)據(jù)是分開的,InnoDB引擎就是索引和數(shù)據(jù)在一起】
3.創(chuàng)建索引
3.1 索引創(chuàng)建語法
create [unique] [bitmap] index on [schema.]table(column[asc|desc][,...]) [reverse] [parameter_list];
其中:
unique 表示建立唯一性索引
bitmap 表示建立位圖索引
asc|desc 用于指定索引值的排列順序,asc表示按升序排列,desc表示按降序排序(默認(rèn)值為asc)
reverse 表示建立反鍵索引
parameter_list 用于指定索引的存放位置、存儲空間分配和數(shù)據(jù)塊參數(shù)設(shè)置
3.2 索引創(chuàng)建案例
3.2.1 例1:非唯一性索引
- 在emp表的last_name列上創(chuàng)建一個(gè)非唯一性索引
create index emp_lname_index on emp(last_name) tablespace index;
## tablespace index 表示索引存儲在名為 index 的表空間中,也就是說,數(shù)據(jù)將會在此表空間中進(jìn)行存儲和管理
3.2.2 例2:唯一性索引
- 在emp表的email列上創(chuàng)建一個(gè)唯一性索引
create unique index emp_email_index on emp(email) tablespace index;
3.2.3 例3:位圖索引
- 在emp表的job_id列上創(chuàng)建一個(gè)位圖索引
create bitmap index emp_job_index on emp(job_id) tablespace index;
3.2.4 例4:函數(shù)索引
- 基于emp表的first_name 列創(chuàng)建一個(gè)函數(shù)索引
create index emp_fname_index on emp(upper(first_name)) tablespace index;
4.分區(qū)索引
-
在Oracle數(shù)據(jù)庫中,索引與表時(shí)相互獨(dú)立的,索引是否分區(qū) 與 表是否分區(qū) 沒有直接關(guān)系
-
不分區(qū)的表可以創(chuàng)建分區(qū)索引和不分區(qū)索引,分區(qū)的表也可以創(chuàng)建分區(qū)索引或不分區(qū)的索引,如下圖所示
3.1分區(qū)索引概念
-
在Oracle數(shù)據(jù)庫中,分區(qū)索引分為本地分區(qū)索引和全局分區(qū)索引
-
本地分區(qū)索引是指為分區(qū)表中的各個(gè)分區(qū)單獨(dú)創(chuàng)建索引分區(qū),各個(gè)索引分區(qū)之間是相互獨(dú)立的,索引的分區(qū)與表的分區(qū)是一一對應(yīng)的,如下圖所示,為分區(qū)表創(chuàng)建了本地分區(qū)索引后,Oracle會自動對表的分區(qū)和索引的分區(qū)進(jìn)行同步維護(hù)
-
全局分區(qū)索引是指先對整個(gè)表建立索引,然后再對索引進(jìn)行分區(qū)。索引的分區(qū)之間不是相互獨(dú)立的,索引分區(qū)與表分區(qū)之間也不是一一對應(yīng)的,如下圖6-3所示;也可以為分區(qū)表創(chuàng)建非分區(qū)的全局索引,如下圖6-4所示
2.分區(qū)索引案例
2.1 創(chuàng)建本地分區(qū)索引
- 分區(qū)表創(chuàng)建后,可以對分區(qū)表創(chuàng)建本地分區(qū)索引,在指明分區(qū)方法時(shí)使用local關(guān)鍵字標(biāo)識本地分區(qū)索引
# 例:在student_range分區(qū)表的sname列上創(chuàng)建本地分區(qū)索引
create index student_range_local on student_range(sname) local
2.2全局分區(qū)索引
- 與表分區(qū)方法類似,索引分區(qū)方法也包括范圍分區(qū)、列表分區(qū)、散列分區(qū)和復(fù)合分區(qū)等,在指明分區(qū)方法時(shí)使用global關(guān)鍵字標(biāo)識全局分區(qū)索引
# 例:為分區(qū)表student_list的sage列建立基于范圍的全局分區(qū)索引
create index student_list_global on student_list(sage) global
partition by range(sage)
(
partition p1 values less than (80) tablespace orcltbs1,
partition p1 values less than (maxvalue) tablespace orcltbs2
)
3.全局非分區(qū)索引
- 為分區(qū)表創(chuàng)建全局非分區(qū)索引與為標(biāo)準(zhǔn)表創(chuàng)建索引一樣
# 例:為分區(qū)表student_list_index創(chuàng)建全局非分區(qū)索引
create index student_list_index on student_list_index(sname) tablespace index
??感謝大家耐心的看完這篇文章,這篇文章是
SQL索引
的第4
篇文章,關(guān)于Oracle的索引
?如果大家覺著內(nèi)容還算可以,那么就關(guān)注一下愛書不愛輸?shù)某绦蛟?/strong>吧
??也可以加入我的社區(qū)一起學(xué)習(xí)呀
??各種專欄,精彩不斷文章來源:http://www.zghlxwxcb.cn/news/detail-689456.html
- SQL應(yīng)知應(yīng)會專欄,對于數(shù)據(jù)庫的一些學(xué)習(xí),有基礎(chǔ)也有進(jìn)階,
有MySQL也有Oracle
- UML應(yīng)知應(yīng)會專欄,對于UML的一些講解,應(yīng)有盡有
- … … 還有java的專欄、算法與數(shù)據(jù)結(jié)構(gòu)的專欄等其他專欄,快去我的主頁關(guān)注我吧
文章來源地址http://www.zghlxwxcb.cn/news/detail-689456.html
到了這里,關(guān)于【SQL應(yīng)知應(yīng)會】索引 ? Oracle版:B-樹索引;位圖索引;函數(shù)索引;單列與復(fù)合索引;分區(qū)索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!