日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Oracle索引的建立及优缺点

發(fā)布時(shí)間:2023/12/31 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle索引的建立及优缺点 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在看公司建表語句時(shí)發(fā)現(xiàn)了這樣一段代碼

本著學(xué)習(xí)的態(tài)度面向百度:::::
原來這是Oracle的索引

Oracle的索引說明

1)索引是數(shù)據(jù)庫(kù)對(duì)象之一,用于加快數(shù)據(jù)的檢索,類似于書籍的索引。在數(shù)據(jù)庫(kù)中索引可以減少數(shù)據(jù)庫(kù)程序查詢結(jié)果時(shí)需要讀取的數(shù)據(jù)量,類似于在書籍中我們利用索引可以不用翻閱整本書即可找到想要的信息。

2)索引是建立在表上的可選對(duì)象;索引的關(guān)鍵在于通過一組排序后的索引鍵來取代默認(rèn)的全表掃描檢索方式,從而提高檢索效率

3)索引在邏輯上和物理上都與相關(guān)的表和數(shù)據(jù)無關(guān),當(dāng)創(chuàng)建或者刪除一個(gè)索引時(shí),不會(huì)影響基本的表;

4)索引一旦建立,在表上進(jìn)行DML操作時(shí)(例如在執(zhí)行插入、修改或者刪除相關(guān)操作時(shí)),oracle會(huì)自動(dòng)管理索引,索引刪除,不會(huì)對(duì)表產(chǎn)生影響

5)索引對(duì)用戶是透明的,無論表上是否有索引,sql語句的用法不變

6)oracle創(chuàng)建主鍵時(shí)會(huì)自動(dòng)在該列上創(chuàng)建索引

數(shù)據(jù)庫(kù)索引是為了提高查詢速度的一種數(shù)據(jù)結(jié)構(gòu)。

  • 索引的創(chuàng)建語句。
  • CREATE INDEX 索引名 ON 表名(列名); --下面是表空間及參數(shù) tablespace GFMISpctfree 10 --塊保留10%的空間留給更新該塊數(shù)據(jù)使用initrans 1 --初始化事務(wù)槽的個(gè)數(shù)maxtrans 255 --最大事務(wù)槽的個(gè)數(shù)storage --存儲(chǔ)參數(shù)( initial 64k --區(qū)段(extent)一次擴(kuò)展64kminextents 1 --最小區(qū)段數(shù)maxextents unlimited --最大區(qū)段無限制 );
  • 除了單列索引,還可以創(chuàng)建包含多個(gè)列的復(fù)合索引。
  • CREATE INDEX 索引名 ON 表名(列名1, 列名2, 列名3, ...);
  • 刪除索引。
  • DROP INDEX 索引名;
  • 查看某個(gè)表中的所有索引。
  • SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = '表名'
  • 還可以查看某個(gè)表中建立了索引的所有列。
  • SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '表名'

    知道了怎么用,下一步就該知道為什么這樣用了

    我們都是知道,建立索引是為了提高查詢效率,那么,應(yīng)該怎么建立索引吶?

    索引的建立原則

  • 索引應(yīng)該建立在WHERE子句中經(jīng)常使用的列上。如果某個(gè)大表經(jīng)常使用某個(gè)字段進(jìn)行查詢,并且檢索的啊行數(shù)小于總表行數(shù)的5%,則應(yīng)該考慮在該列上建立索引。

  • 對(duì)于兩個(gè)表連接的字段,應(yīng)該建立索引。

  • 如果經(jīng)常在某表的一個(gè)字段上進(jìn)行Order By的話,則也應(yīng)該在這個(gè)列上建立索引。

  • 不應(yīng)該在小表上建立索引。

  • 另外附上索引的優(yōu)缺點(diǎn)(面試會(huì)經(jīng)常問到)

    索引的優(yōu)缺點(diǎn)

    索引主要是為了提高數(shù)據(jù)的查詢速度,這就是索引的優(yōu)點(diǎn)。但是當(dāng)進(jìn)行增刪改的時(shí)候,會(huì)更新索引。因此索引越多,增刪改的速度就會(huì)越慢,因?yàn)橛幸粋€(gè)維護(hù)索引的過程。創(chuàng)建索引之前需要權(quán)衡該字段是否經(jīng)常發(fā)生增刪改操作,否則可能會(huì)帶來負(fù)優(yōu)化的問題。

    索引的優(yōu)點(diǎn)

  • 很大地提高了數(shù)據(jù)的檢索速度。

  • 創(chuàng)建唯一索引能保證數(shù)據(jù)庫(kù)表中每一行數(shù)據(jù)的唯一性(唯一性約束)。

  • 提高表與表之間的連接速度。

  • 索引的缺點(diǎn)

  • 索引需要占用物理空間。

  • 當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)地進(jìn)行維護(hù),降低數(shù)據(jù)的維護(hù)速度。

  • 最后補(bǔ)充點(diǎn)額外知識(shí):

    關(guān)于查詢優(yōu)化器

    當(dāng)Oracle拿到SQL語句的時(shí)候,會(huì)使用查詢優(yōu)化器去分析該語句,并根據(jù)分析結(jié)果生成查詢執(zhí)行計(jì)劃。也就是說,數(shù)據(jù)庫(kù)是執(zhí)行的查詢計(jì)劃,而不是SQL語句。

    查詢優(yōu)化器有RBO(Rule-Based-Optimizer,基于規(guī)則的查詢優(yōu)化器)和CBO(Cost-Based-Optimizer,基于成本的查詢優(yōu)化器),其中基于規(guī)則的查詢優(yōu)化器在10g的版本中徹底消失了。原因是因?yàn)镽BO最后的查詢都是全表掃描,而CBO會(huì)根據(jù)統(tǒng)計(jì)信息選擇最優(yōu)的查詢方案。

    因此,CBO一旦發(fā)現(xiàn)有索引的存在,并且這個(gè)索引能幫助提高查詢速度,就是使用通過索引進(jìn)行查詢的方法。

    總結(jié)

    以上是生活随笔為你收集整理的Oracle索引的建立及优缺点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。