Oracle索引的建立及优缺点
在看公司建表語句時發(fā)現(xiàn)了這樣一段代碼
本著學習的態(tài)度面向百度:::::
原來這是Oracle的索引
Oracle的索引說明
1)索引是數(shù)據(jù)庫對象之一,用于加快數(shù)據(jù)的檢索,類似于書籍的索引。在數(shù)據(jù)庫中索引可以減少數(shù)據(jù)庫程序查詢結果時需要讀取的數(shù)據(jù)量,類似于在書籍中我們利用索引可以不用翻閱整本書即可找到想要的信息。
2)索引是建立在表上的可選對象;索引的關鍵在于通過一組排序后的索引鍵來取代默認的全表掃描檢索方式,從而提高檢索效率
3)索引在邏輯上和物理上都與相關的表和數(shù)據(jù)無關,當創(chuàng)建或者刪除一個索引時,不會影響基本的表;
4)索引一旦建立,在表上進行DML操作時(例如在執(zhí)行插入、修改或者刪除相關操作時),oracle會自動管理索引,索引刪除,不會對表產(chǎn)生影響
5)索引對用戶是透明的,無論表上是否有索引,sql語句的用法不變
6)oracle創(chuàng)建主鍵時會自動在該列上創(chuàng)建索引
數(shù)據(jù)庫索引是為了提高查詢速度的一種數(shù)據(jù)結構。
知道了怎么用,下一步就該知道為什么這樣用了
我們都是知道,建立索引是為了提高查詢效率,那么,應該怎么建立索引吶?
索引的建立原則
索引應該建立在WHERE子句中經(jīng)常使用的列上。如果某個大表經(jīng)常使用某個字段進行查詢,并且檢索的啊行數(shù)小于總表行數(shù)的5%,則應該考慮在該列上建立索引。
對于兩個表連接的字段,應該建立索引。
如果經(jīng)常在某表的一個字段上進行Order By的話,則也應該在這個列上建立索引。
不應該在小表上建立索引。
另外附上索引的優(yōu)缺點(面試會經(jīng)常問到)
索引的優(yōu)缺點
索引主要是為了提高數(shù)據(jù)的查詢速度,這就是索引的優(yōu)點。但是當進行增刪改的時候,會更新索引。因此索引越多,增刪改的速度就會越慢,因為有一個維護索引的過程。創(chuàng)建索引之前需要權衡該字段是否經(jīng)常發(fā)生增刪改操作,否則可能會帶來負優(yōu)化的問題。
索引的優(yōu)點
很大地提高了數(shù)據(jù)的檢索速度。
創(chuàng)建唯一索引能保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性(唯一性約束)。
提高表與表之間的連接速度。
索引的缺點
索引需要占用物理空間。
當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)地進行維護,降低數(shù)據(jù)的維護速度。
最后補充點額外知識:
關于查詢優(yōu)化器
當Oracle拿到SQL語句的時候,會使用查詢優(yōu)化器去分析該語句,并根據(jù)分析結果生成查詢執(zhí)行計劃。也就是說,數(shù)據(jù)庫是執(zhí)行的查詢計劃,而不是SQL語句。
查詢優(yōu)化器有RBO(Rule-Based-Optimizer,基于規(guī)則的查詢優(yōu)化器)和CBO(Cost-Based-Optimizer,基于成本的查詢優(yōu)化器),其中基于規(guī)則的查詢優(yōu)化器在10g的版本中徹底消失了。原因是因為RBO最后的查詢都是全表掃描,而CBO會根據(jù)統(tǒng)計信息選擇最優(yōu)的查詢方案。
因此,CBO一旦發(fā)現(xiàn)有索引的存在,并且這個索引能幫助提高查詢速度,就是使用通過索引進行查詢的方法。
總結
以上是生活随笔為你收集整理的Oracle索引的建立及优缺点的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 正向随机微分方程的经典数值格式模拟
- 下一篇: 随机微分方程学习笔记03 Fisk-St