oracle索引如何添加 Oracle添加索引

oracle 數(shù)據(jù)庫(kù)如何建立索引 如何用索引?

創(chuàng)建索引語(yǔ)法:

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元沈河做網(wǎng)站,已為上家服務(wù),為沈河各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話(huà):028-86922220

CREATE[UNIQUE]|[BITMAP]INDEXindex_name

--unique表示唯一索引

ONtable_name([column1[ASC|DESC],column2

--bitmap,創(chuàng)建位圖索引

[ASC|DESC],?]|[express])[TABLESPACEtablespace_name][PCTFREEn1]

--指定索引在數(shù)據(jù)塊中空閑空間

[STORAGE(INITIALn2)][NOLOGGING]

--表示創(chuàng)建和重建索引時(shí)允許對(duì)表做DML操作,默認(rèn)情況下不應(yīng)該使用

[NOLINE][NOSORT];

--表示創(chuàng)建索引時(shí)不進(jìn)行排序,默認(rèn)不適用,如果數(shù)據(jù)已經(jīng)是按照該索引順序排列的可以使用

擴(kuò)展資料:

1、如果有兩個(gè)或者以上的索引,其中有一個(gè)唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引

2、至少要包含組合索引的第一列(即如果索引建立在多個(gè)列上,只有它的第一個(gè)列被where子句引用時(shí),優(yōu)化器才會(huì)使用該索引)

3、小表不要簡(jiǎn)歷索引

4、對(duì)于基數(shù)大的列適合建立B樹(shù)索引,對(duì)于基數(shù)小的列適合簡(jiǎn)歷位圖索引

5、列中有很多空值,但經(jīng)常查詢(xún)?cè)摿猩戏强沼涗洉r(shí)應(yīng)該建立索引

6、經(jīng)常進(jìn)行連接查詢(xún)的列應(yīng)該創(chuàng)建索引

7、使用createindex時(shí)要將最常查詢(xún)的列放在最前面

8、LONG(可變長(zhǎng)字符串?dāng)?shù)據(jù),最長(zhǎng)2G)和LONGRAW(可變長(zhǎng)二進(jìn)制數(shù)據(jù),最長(zhǎng)2G)列不能創(chuàng)建索引

9、限制表中索引的數(shù)量(創(chuàng)建索引耗費(fèi)時(shí)間,并且隨數(shù)據(jù)量的增大而增大;索引會(huì)占用物理空間;當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度)

oracle怎樣添加索引?

create index 索引名 on tbl_name (A1,B1).

創(chuàng)建索引的目的是為了在某些字段上查詢(xún)更快,而添加的一些預(yù)地址。

1.服務(wù)器及工具

數(shù)據(jù)庫(kù)服務(wù)器:2013年最新版本Oracle 12C。

應(yīng)用服務(wù)器:Oracle Application Server。

開(kāi)發(fā)工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。

2.企業(yè)應(yīng)用軟件

企業(yè)資源計(jì)劃(ERP)軟件。已有10年以上的歷史。2005年,并購(gòu)了開(kāi)發(fā)企業(yè)軟件的仁科軟件公司(PeopleSoft)以增強(qiáng)在這方面的競(jìng)爭(zhēng)力。

客戶(hù)關(guān)系管理(CRM)軟件。自1998年開(kāi)始研發(fā)這種軟件。2005年,并購(gòu)了開(kāi)發(fā)客戶(hù)關(guān)系管理軟件的希柏軟件公司(Siebel)。

3. Oracle職業(yè)發(fā)展力計(jì)劃(Oracle WDP)

Oracle WDP 全稱(chēng)為Oracle Workforce Development Program,是Oracle (甲骨文)公司專(zhuān)門(mén)面向?qū)W生、個(gè)人、在職人員等群體開(kāi)設(shè)的職業(yè)發(fā)展力課程。Oracle的技術(shù)廣泛應(yīng)用于各行各業(yè),其中電信、電力、金融、政府及大量制造業(yè)都需要Oracle技術(shù)人才,Oracle公司針對(duì)職業(yè)教育市場(chǎng)在全球推廣的項(xiàng)目,其以低廉的成本給這部分人群提供Oracle技術(shù)培訓(xùn),經(jīng)過(guò)系統(tǒng)化的實(shí)訓(xùn),讓這部分人群能夠迅速掌握Oracle最新的核心技術(shù),并能勝任企業(yè)大型數(shù)據(jù)庫(kù)管理、維護(hù)、開(kāi)發(fā)工作。

在Oracle中合理創(chuàng)建數(shù)據(jù)庫(kù)的索引

在Oracle數(shù)據(jù)庫(kù)中 創(chuàng)建索引雖然比較簡(jiǎn)單 但是要合理的創(chuàng)建索引則比較困難了 筆者認(rèn)為 在創(chuàng)建索引時(shí)要做到三個(gè)適當(dāng) 即在適當(dāng)?shù)谋砩?適當(dāng)?shù)牧猩蟿?chuàng)建適當(dāng)數(shù)量的索引 雖然這可以通過(guò)一句話(huà)來(lái)概括優(yōu)化的索引的基本準(zhǔn)則 但是要做到這一點(diǎn)的話(huà) 需要數(shù)據(jù)庫(kù)管理員做出很大的努力 具體的來(lái)說(shuō) 要做到這個(gè)三個(gè)適當(dāng)有如下幾個(gè)要求

一 根據(jù)表的大小來(lái)創(chuàng)建索引

雖然給表創(chuàng)建索引 可以提高查詢(xún)的效率 但是數(shù)據(jù)庫(kù)管理員需要注意的是 索引也需要一定的開(kāi)銷(xiāo)的 為此并不是說(shuō)給所有的表都創(chuàng)建索引 那么就可以提高數(shù)據(jù)庫(kù)的性能 這個(gè)認(rèn)識(shí)是錯(cuò)誤的 恰恰相反 如果不管三七二十一 給所有的表都創(chuàng)建了索引 那么其反而會(huì)給數(shù)據(jù)庫(kù)的性能造成負(fù)面的影響 因?yàn)榇藭r(shí)濫用索引的開(kāi)銷(xiāo)可能已經(jīng)遠(yuǎn)遠(yuǎn)大于由此帶來(lái)的性能方面的收益 所以筆者認(rèn)為 數(shù)據(jù)庫(kù)管理員首先需要做到 為合適的表來(lái)建立索引 而不是為所有的表建立索引

一般來(lái)說(shuō) 不需要為比較小的表創(chuàng)建索引 如在一個(gè)ERP系統(tǒng)的數(shù)據(jù)庫(kù)中 department表用來(lái)存儲(chǔ)企業(yè)部門(mén)的信息 一般企業(yè)的部分也就十幾個(gè) 最多不會(huì)超過(guò)一百個(gè) 這 條記錄對(duì)于人來(lái)說(shuō) 可能算是比較多了 但是對(duì)于計(jì)算機(jī)來(lái)說(shuō) 這給他塞塞牙縫都還不夠 所以 對(duì)類(lèi)似的小表沒(méi)有必要建立索引 因?yàn)榧词菇⒘怂饕?其性能也不會(huì)得到很大的改善 相反索引建立的開(kāi)銷(xiāo) 如維護(hù)成本等等 要比這個(gè)要大 也就是說(shuō) 付出的要比得到的多 顯然違反常理

另外 就是對(duì)于超大的表 也不一定要建立索引 有些表雖然比較大 記錄數(shù)量非常的多 但是此時(shí)為這個(gè)表建立索引并一定的合適 如系統(tǒng)中有一張表 其主要用來(lái)保存數(shù)據(jù)庫(kù)中的一些變更信息 往往這些信息只給數(shù)據(jù)庫(kù)管理員使用 此時(shí)為這張表建立索引的話(huà) 反而不合適 因?yàn)檫@張表很少用到 只有在出問(wèn)題的時(shí)候才需要查看 其次其即使查看 需要查詢(xún)的紀(jì)錄也不會(huì)很多 可能就是最近一周的更新記錄等等 對(duì)于對(duì)于一些超大的表 建立索引有時(shí)候往往不能夠達(dá)到預(yù)計(jì)的效果 而且在打表上建立索引 其索引的開(kāi)銷(xiāo)要比普通的表大的多 那么到底是否給大表建立索引呢?筆者認(rèn)為 主要是看兩個(gè)方面的內(nèi)容 首先是需要關(guān)注一下 在這張大表中經(jīng)常需要查詢(xún)的記錄數(shù)量 一般來(lái)說(shuō) 如果經(jīng)常需要查詢(xún)的數(shù)據(jù)不超過(guò) %到 %的話(huà) 那就沒(méi)有必要為其建立索引的必要 因?yàn)榇藭r(shí)建立索引的開(kāi)銷(xiāo)可能要比性能的改善大的多 這個(gè)比例只是一個(gè)經(jīng)驗(yàn)的數(shù)據(jù) 如果數(shù)據(jù)庫(kù)管理員需要得出一個(gè)比較精確的結(jié)論 那么就需要進(jìn)行測(cè)試分析 即數(shù)據(jù)庫(kù)管理員需要測(cè)試一下全表掃描的時(shí)間 看看其是否比建立索引后的查詢(xún)時(shí)間要長(zhǎng)或者短 如果是長(zhǎng)的話(huà) 則說(shuō)明有建立索引的必要 但是如果沒(méi)有的話(huà) 則說(shuō)明還是全表掃描速度來(lái)的快 此時(shí)也就沒(méi)有必要建立索引了

總之 在考慮是否該為表建立索引時(shí) 一般來(lái)說(shuō)小表沒(méi)有建立索引的必要 而對(duì)于打表的話(huà) 則需要進(jìn)行實(shí)際情況實(shí)際分析 簡(jiǎn)單一點(diǎn)的 可以根據(jù)大致的比率來(lái)確定 如果要精確一點(diǎn)的 則可以進(jìn)行全表掃描性能分析 以判斷建立索引后是否真的如預(yù)期那樣改善了數(shù)據(jù)庫(kù)性能

二 根據(jù)列的特征來(lái)創(chuàng)建索引

列的特點(diǎn)不同 索引創(chuàng)建的效果也不同 數(shù)據(jù)庫(kù)管理員需要了解為哪些列創(chuàng)建索引可以起到事倍功半的效果 同時(shí)也需要了解為哪些列創(chuàng)建索引反而起到的是事倍功半的效果 這有利于他們了解到底給為怎么樣的字段建立索引

根據(jù)筆者的經(jīng)驗(yàn) 往往為如下特征的列創(chuàng)建索引能夠起到比較明顯的效果 如對(duì)于一些重復(fù)內(nèi)容比較少的列 特別是對(duì)于那些定義了唯一約束的列 在這些列上建立索引 往往可以起到非常不錯(cuò)的效果 如對(duì)于一些null值的列與非Null值的列混合情況下 如果用戶(hù)需要經(jīng)常查詢(xún)所有的非Null值記錄的列 則最好為其設(shè)置索引 如果經(jīng)常需要多表連接查詢(xún) 在用與連接的列上設(shè)置索引可以達(dá)到事半功倍的效果

可見(jiàn) 索引設(shè)置的是否恰當(dāng) 不僅跟數(shù)據(jù)庫(kù)設(shè)計(jì)架構(gòu)有關(guān) 而且還跟企業(yè)的經(jīng)濟(jì)業(yè)務(wù)相關(guān) 為此 對(duì)于一些套裝軟件 雖然一開(kāi)始數(shù)據(jù)庫(kù)管理員已經(jīng)做了索引的優(yōu)化工作 但是隨著后來(lái)經(jīng)濟(jì)數(shù)據(jù)的增加 這個(gè)索引的效果會(huì)越來(lái)越打折扣 這主要是因?yàn)橛涗浀谋砘绊懙搅怂饕齼?yōu)化的效果 所以筆者建議各位數(shù)據(jù)庫(kù)管理員 即使采用的是大牌軟件公司的套裝軟件 也需要隔一段時(shí)間 如一年 對(duì)數(shù)據(jù)庫(kù)的索引進(jìn)行優(yōu)化 該去掉的去掉 該調(diào)整的調(diào)整 以提高數(shù)據(jù)庫(kù)的性能

如在數(shù)據(jù)庫(kù)中有一張表是用來(lái)保存用戶(hù)信息的 其中有個(gè)字段身份證號(hào)碼 這是一個(gè)唯一的字段 在數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí) 給這個(gè)字段創(chuàng)建了索引 但是當(dāng)這個(gè)數(shù)據(jù)庫(kù)投入使用之后 用戶(hù)不怎么輸入用戶(hù)的身份證號(hào)碼 而且平時(shí)也基本不按這個(gè)號(hào)碼來(lái)進(jìn)行查詢(xún) 當(dāng)記錄月來(lái)月多時(shí) 這個(gè)身份證號(hào)碼上的索引字段不但不能夠改善數(shù)據(jù)庫(kù)的查詢(xún)性能 反而成了雞肋 對(duì)于這些有很多NULL值的列 而且不會(huì)經(jīng)常查詢(xún)所有的非NULL值記錄的列 數(shù)據(jù)庫(kù)管理員要下決心 即使清除這些列上的索引

所以說(shuō)索引的優(yōu)化與調(diào)整是一個(gè)動(dòng)態(tài)的過(guò)程 并不是說(shuō)數(shù)據(jù)庫(kù)設(shè)計(jì)好之后就不需要經(jīng)過(guò)調(diào)整 數(shù)據(jù)庫(kù)管理員往往需要根據(jù)記錄的變化情況 來(lái)進(jìn)行適當(dāng)?shù)淖兏?以提高索引的效果

三 在一個(gè)表上創(chuàng)建多少索引合適?

雖然說(shuō) 在表上創(chuàng)建索引的數(shù)量沒(méi)有限制 但是決不是越多越好 也就是說(shuō) 在創(chuàng)建索引這項(xiàng)事情上 + 〉 往往不成立 有時(shí)候 創(chuàng)建索引越多 其可能會(huì)得到適得其反的效果 那么在一個(gè)表上 到底給創(chuàng)建多少索引合適呢?這個(gè)沒(méi)有一個(gè)明確的標(biāo)準(zhǔn) 而是需要數(shù)據(jù)庫(kù)管理員根據(jù)實(shí)際的用途以及數(shù)據(jù)庫(kù)中記錄的情況 來(lái)進(jìn)行判斷

通常來(lái)說(shuō) 表的索引越多 其查詢(xún)的速度也就越快 但是 表的更新速度則會(huì)降低 這主要是因?yàn)楸淼母?如往表中插入一條記錄)速度 反而隨著索引的增加而增加 這主要是因?yàn)?在更新記錄的同時(shí)需要更新相關(guān)的索引信息 為此 到底在表中創(chuàng)建多少索引合適 就需要在這個(gè)更新速度與查詢(xún)速度之間取得一個(gè)均衡點(diǎn) 如對(duì)于一些數(shù)據(jù)倉(cāng)庫(kù)或者決策型數(shù)據(jù)庫(kù)系統(tǒng) 其主要用來(lái)進(jìn)行查詢(xún) 相關(guān)的記錄往往是在數(shù)據(jù)庫(kù)初始化的時(shí)候倒入 此時(shí) 設(shè)置的索引多一點(diǎn) 可以提高數(shù)據(jù)庫(kù)的查詢(xún)性能 同時(shí)因?yàn)橛涗洸辉趺锤?所以索引比較多的情況下 也不會(huì)影響到更新的速度 即使在起初的時(shí)候需要導(dǎo)入大量的數(shù)據(jù) 此時(shí)也可以先將索引禁用掉 等到數(shù)據(jù)導(dǎo)入完畢后 再啟用索引 可以通過(guò)這種方式來(lái)減少索引對(duì)數(shù)據(jù)更新的影響 相反 如果那些表中經(jīng)常需要更新記錄 如一些事務(wù)型的應(yīng)用系統(tǒng) 數(shù)據(jù)更新操作是家常便飯的事情 此時(shí)如果在一張表中建立過(guò)多的索引 則會(huì)影響到更新的速度 由于更新操作比較頻繁 所以對(duì)其的負(fù)面影響 要比查詢(xún)效率提升要大的多 此時(shí)就需要限制索引的數(shù)量 只在一些必要的字段上建立索引

筆者在平時(shí)數(shù)據(jù)庫(kù)優(yōu)化時(shí) 往往會(huì)根據(jù)這些表的用途來(lái)為列設(shè)置索引 可以查詢(xún)相關(guān)的動(dòng)態(tài)視圖 看看對(duì)于這張表的操作 是更新操作(包括更新 刪除 插入等等)占的比例大 還是查詢(xún)操作占的比例大 當(dāng)過(guò)多的索引已經(jīng)影響到更新操作的速度時(shí) 則數(shù)據(jù)庫(kù)管理員就需要先禁用某些索引 以提高數(shù)據(jù)庫(kù)的性能

lishixinzhi/Article/program/Oracle/201311/18407

網(wǎng)頁(yè)標(biāo)題:oracle索引如何添加 Oracle添加索引
標(biāo)題鏈接:http://muchs.cn/article40/hhecho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、服務(wù)器托管、面包屑導(dǎo)航、Google、網(wǎng)站維護(hù)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)