索引(轉載自百度百科)

Oracle索引

編輯
本詞條缺少信息欄名片圖,補充相關內容使詞條更完整,還能快速升級,趕緊來編輯吧!
在oracle索引是一種供服務器在表中快速查找一個行的數據庫結構。合理使用索引能夠大大提高數據庫的運行效率。

目錄

  1. 1 概念及作用
  2. 2 索引的分類
  1. 3 索引使用原則
  2. 4 Oracle創建索引語法
  1. 5 語法分析

概念及作用

編輯
在oracle中,索引是一種供服務器在表中快速查找一個行的數據庫結構。在數據庫中建立索引主要有以下作用。
  (1)快速存取數據。
  (2)既可以改善數據庫性能,又可以保證列值的唯一性。
  (3)實現表與表之間的參照完整性
  (4)在使用orderby、groupby子句進行數據檢索時,利用索引可以減少排序和分組的時間。

索引的分類

編輯
在關系數據庫中,每一行都由一個行唯一標識RowID。RowID包括該行所在的文件、在文件中的塊數和塊中的行號。索引中包含一個索引條目,每一個索引條目都有一個鍵值和一個RowID,其中鍵值可以是一列或者多列的組合。
  (一)索引按存儲方法分類,可以分為2類:B*樹索引和位圖索引。
  (1)B*樹索引的存儲結構類似書的索引結構,有分支和葉兩種類型的存儲數據塊,分支塊相當于書的大目錄,葉塊相當于索引到的具體的書頁。Oracle用B*樹機制存儲索引條目,以保證用最短路徑訪問鍵值。默認情況下大多使用B*樹索引,該索引就是通常所見的唯一索引、逆序索引。
  (2)位圖索引存儲主要用于節省空間,減少oracle對數據塊的訪問。它采用位圖偏移方式來與表的行ID號對應,采用位圖索引一般是重復值太多的表字段。位圖索引之所以在實際密集型OLTP(聯機事物處理)中用的比較少,是因為OLTP會對表進行大量的刪除、修改、新建操作。Oracle每次進行操作都會對要操作的數據塊加鎖。以防止多人操作容易產生的數據庫鎖等待甚至死鎖現象。在OLAP(聯機分析處理)中應用位圖有優勢,因為OLAP中大部分是對數據庫的查詢操作,而且一般采用數據倉庫技術,所以大量數據采用位圖索引節省空間比較明顯。當創建表的命令中包含有唯一性關鍵字時,不能創建位圖索引,創建全局分區索引時也不能用位圖索引。
  (二)索引按功能和索引對象分還有以下類型。
  (1)唯一索引意味著不會有兩行記錄相同的索引鍵值。唯一索引表中的記錄沒有RowID,不能再對其建立其他索引。在oracle10g中,要建立唯一索引,必須在表中設置主關鍵字,建立了唯一索引的表只按照該唯一索引結構排序。
  (2)非唯一索引不對索引列的值進行唯一性限制。
  (3)分區索引是指索引可以分散地存在于多個不同的表空間中,其優點是可以提高數據查詢的效率。
  (4)未排序索引也稱為正向索引。Oracle10g數據庫中的行是按升序排序的,創建索引時不必指定對其排序而使用默認的順序。
  (5)逆序索引也稱反向索引。該索引同樣保持列按順序排列,但是顛倒已索引的每列的字節。
  (6)基于函數的索引是指索引中的一列或者多列是一個函數或者表達式,索引根據函數或表達式計算索引列的值。可以將基于函數的索引建立創建成位圖索引。
  另外,按照索引所包含的列數可以把索引分為單列索引和復合索引。索引列只有一列的索引為單列索引,對多列同時索引稱為復合索引。

索引使用原則

編輯
在正確使用索引的前提下,索引可以提高檢索相應的表的速度。當用戶考慮在表中使用索引時,應遵循下列一些基本原則。
  (1)在表中插入數據后創建索引。在表中插入數據后,創建索引效率將更高。如果在裝載數據之前創建索引,那么插入每行時oracle都必須更改索引。
  (2)索引正確的表和列。如果經常檢索包含大量數據的表中小于15%的行,就需要創建索引。為了改善多個表的相互關系,常常使用索引列進行關系連接。
  (3)主鍵和唯一關鍵字所在的列自動具有索引,但應該在與之關聯的表中的外部關鍵字所在的列上創建索引。
  (4)合理安排索引列。在createindex語句中,列的排序會影響查詢的性能,通常將最常用的列放在前面。創建一個索引來提高多列的查詢效率時,應該清楚地了解這個多列的索引對什么列的存取有效,對什么列的存取無效。
  例如:在A,B,C三列上創建索引
  A有效
  AB有效
  ABC有效
  (5)限制表中索引的數量。盡管表可以有任意數量的索引,可是索引越多,在修改表中的數據時對索引做出相應更改的工作量也越大,效率也就越低。同樣,目前不用的索引應該及時刪除。
  (6)指定索引數據塊空間的使用。創建索引時,索引的數據塊是用表中現存的值填充的,直到達到PCTFREE為止。如果打算將許多行插入到被索引的表中,PCTFREE就應設置得大一點,不能給索引指定PCTUSED。
  (7)根據索引大小設置存儲參數。創建索引之前應先估計索引的大小,以便更好地促進規劃和管理磁盤空間。單個索引項的最大值大約是數據塊大小的一半。

Oracle創建索引語法

編輯
Create[UNIQUE|BITMAP]index
  [schema.]index_nameon[schema.]table_name(column_name[ASC|DESC],…n,[column_expression])|CLUSTER[schema.]cluster_name
  [INITRANSinteger]
  [MAXTRANSinteger]
  [PCTFREEinteger]
  [PCTUESDinteger]
  [TABLESPACEtablespace_name]
  [STORAGEstorage_clause]
  [NOSORT]
  [REVERSE]

語法分析

編輯
UNIQUE指定索引所基于的列(或多列)值必須唯一。默認的索引是非唯一的。

?

BITMAP指定建立位映射索引而不是B*索引。位映射索引保存的行標識符與作為位映射的鍵值有關。位映射中的每一位都對應于一個可能的行標識符,位設置意味著具有對應行標識符的行包含該鍵值。

?

ONtable_name建立基于函數的索引。用table_name的列、常數、SQL函數和自定義函數創建的表達式。指定column_expression,以后用基于函數的索引查詢時,必須保證查詢該column_expression不為空。

?

CLUSTER創建cluster_name簇索引。若表不用schema限制,oracle假設簇包含在你自己的方案中。不能為散列簇創建簇索引。

?

NOSORT數據庫中的行以升序保存,在創建索引時不必對行排序。若索引列或多列的行不以升序保存,oracle會返回錯誤。

?

REVERSE指定以反序索引塊的字節,不包含行標識符。NOSORT不能與REVERSE一起指定。

轉載于:https://www.cnblogs.com/ailsalin/p/6528010.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿姆斯特朗數_阿姆斯特朗的功能依賴公理 數據庫管理系統

阿姆斯特朗數Armstrong axioms are a complete set of inference rules or axioms, introduced and developed by William W. Armstrong in 1974. The inference rules are sound which is used to test logical inferences of functional dependencies. The axiom which also …

ORACLE JOB 失敗 查看,Oracle JOB異常中斷原因分析

注釋今天研發同事找我確認 PKG_WMS.proc_TaskMain 存儲的 job 是否還在運行,竟發現 dba_jobs.NEXT_DATE4000/1/1,如下看看究竟原因吧~JOB 信息:參數:BROKEN : 中斷標記 ,N 啟動、Y 中斷 --> DBMS_JOBS.BROKEN(job_id,TRUE/FA…

ruby打印_Ruby程序打印一個數字的乘法表

ruby打印打印乘法表 (Printing multiplication table) This requires a very simple logic where we only have to multiply the number with digits from 1 to 10. This can be implemented by putting the multiplication statement inside a loop. We have mentioned two wa…

步驟1:JMeter 錄制腳本接口測試

JMeter 常用測試方法簡介 1.下載安裝 http://jmeter.apache.org/download_jmeter.cgi 安裝JDK,配置環境變量JAVA_HOME. 系統要求:JMeter2.11 需要JDK1.6以上的版本支持運行 2.學習Jmeter元件 http://jmeter.apache.org/usermanual/component_reference.h…

模擬斷電oracle數據不一致,Oracle數據庫案例整理-Oracle系統運行時故障-斷電導致數據文件狀態變為RECOVER...

1.1 現象描述異常斷電,數據庫數據文件的狀態由ONLINE變為RECOVER。系統顯示如下信息:SQL> select file_name ,tablespace_name ,online_status from dba_data_files;FILE_NAME---------------------------------------------------------------…

python日歷模塊_Python日歷模塊| prmonth()方法與示例

python日歷模塊Python calendar.prmonth()方法 (Python calendar.prmonth() Method) prmonth() method is an inbuilt method of the calendar module in Python. It works on simple text calendars and prints the calendar of the given month of the given year. Also, the…

多例模式

多例:只是單例的一種延伸 不必過于在意各種模式的名字,重要的是學會融會貫通,把生產的car放到集合中 類似JDBC 的連接池 把連接對象放到池中 多例模式特點: 1. 多例類可以有多個實例 2. 多例類必須自己創建自己的實例&a…

Oracle public view,【易錯概念】以太坊Solidity函數的external/internal,public/private,view/pure/payable區別...

1. 函數類型:內部(internal)函數和外部(external)函數函數類型是一種表示函數的類型。可以將一個函數賦值給另一個函數類型的變量,也可以將一個函數作為參數進行傳遞,還能在函數調用中返回函數類型變量。 函數類型有兩類:- 內部(i…

c-style字符字符串_C字符串-能力問題與解答

c-style字符字符串C programming String Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on Strings, String is the set of characters and String related Aptitude Questions and Answers you will find here. C編程Stri…

PHP Smarty template for website

/******************************************************************************* PHP Smarty template for website* 說明:* 之前一直在想將MVC的方式加在PHP做的網站上,這樣比較好處理,相對來說比較好* 處理…

ftp連接oracle服務器,使用SSL加密連接FTP - 架建SSL安全加密的FTP服務器(圖)_服務器應用_Linux公社-Linux系統門戶網站...

四、使用SSL加密連接FTP啟用Serv-U服務器的SSL功能后,就可以利用此功能安全傳輸數據了,但FTP客戶端程序必須支持SSL功能才行。 如果我們直接使用IE瀏覽器進行登錄則會出現圖4顯示的錯誤信息,一方面是以為沒有修改默認的端口21為990&#xff0…

c# 情感傾向_C否則-能力傾向問題與解答

c# 情感傾向C programming if else Aptitude Questions and Answers: In this section you will find C Aptitude Questions and Answers on condition statements – if else, nested if else, ladder if else, conditional operators etc. C語言編程如果有問題,請…

springboot中使用緩存shiro-ehcache

在pom.xml中注入緩存依賴,版本(Sep 09, 2016)spring-context-support 包含支持UI模版(Velocity,FreeMarker,JasperReports), 郵件服務, 腳本服務(JRuby), 緩存Cache(EHCa…

oracle 微信公眾號,關于微信公眾號貼代碼的方法

微信公眾號碼上貼代碼一直一來都是個頭疼的問題。吐槽一句:要是后臺編輯器支持markdown就好了。今天教大家用在線markdown排版工具,把代碼完美貼到微信公眾號上。長話短說,今天用到的兩個工具:首先,以一段代碼為例。假…

計算理論 形式語言與自動機_下推式自動機(PDA)| 計算理論

計算理論 形式語言與自動機Pushdown Automaton (PDA) is a kind of Automaton which comes under the theory of Computation that appoints stack. The word Pushdown stands due to the fact that the stack can be pushed down as operations can only work on the elements…

運維人員究竟如何提升價值,持續獲得高薪?

作者簡介:老男孩,北京老男孩IT教育創始人,17年IT經驗,資深Linux實戰專家,IT培訓界實戰派頂尖大師,國內將實戰心理學體系大量注入IT運維培訓領域的第一人,多本IT暢銷圖書作者,51CTO金…

Webservice soap wsdl區別之個人見解

Web Service實現業務訴求:Web Service是真正“辦事”的那個,提供一種辦事接口的統稱。WSDL提供“能辦的事的文檔說明”:對要提供的服務的一種描述格式。我想幫你的忙,但是我要告訴你我都能干什么,以及干這些事情需要的…

java uuid靜態方法_Java UUID nameUUIDFromBytes()方法及示例

java uuid靜態方法UUID類名UUIDFromBytes()方法 (UUID Class nameUUIDFromBytes() method) nameUUIDFromBytes() method is available in java.util package. java.util包中提供了nameUUIDFromBytes()方法 。 nameUUIDFromBytes() method is used to get a UUID constructed fr…

清空 linux 服務器,Linux服務器清理

Why?廢話不多說直接來圖,可以看出磁盤已經快要滿了未清之前What?可以看出mnt文件夾占用的最大,然后進入mnt目錄里通過命令,根據文件大小對該路徑下文件排序du -h --max-depth1我們服務器出現磁盤快滿了的原因是因為,服務器部署了多個tomcat…

Git中的AutoCRLF與SafeCRLF換行符問題

2019獨角獸企業重金招聘Python工程師標準>>> 原文:http://www.cnblogs.com/flying_bat/archive/2013/09/16/3324769.html 最近在使用GitHub,發現不時沒有修改過的文件要提交,對比發現文件全部修改,但找不到不一樣的地方…