create index 索引名 on tbl_name (A1,B1).
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:主機域名、虛擬空間、營銷軟件、網(wǎng)站建設(shè)、阿拉善盟網(wǎng)站維護(hù)、網(wǎng)站推廣。
創(chuàng)建索引的目的是為了在某些字段上查詢更快,而添加的一些預(yù)地址。
1.服務(wù)器及工具
數(shù)據(jù)庫服務(wù)器:2013年最新版本Oracle 12C。
應(yīng)用服務(wù)器:Oracle Application Server。
開發(fā)工具:OracleJDeveloper,Oracle Designer,Oracle Developer,等等。
2.企業(yè)應(yīng)用軟件
企業(yè)資源計劃(ERP)軟件。已有10年以上的歷史。2005年,并購了開發(fā)企業(yè)軟件的仁科軟件公司(PeopleSoft)以增強在這方面的競爭力。
客戶關(guān)系管理(CRM)軟件。自1998年開始研發(fā)這種軟件。2005年,并購了開發(fā)客戶關(guān)系管理軟件的希柏軟件公司(Siebel)。
3. Oracle職業(yè)發(fā)展力計劃(Oracle WDP)
Oracle WDP 全稱為Oracle Workforce Development Program,是Oracle (甲骨文)公司專門面向?qū)W生、個人、在職人員等群體開設(shè)的職業(yè)發(fā)展力課程。Oracle的技術(shù)廣泛應(yīng)用于各行各業(yè),其中電信、電力、金融、政府及大量制造業(yè)都需要Oracle技術(shù)人才,Oracle公司針對職業(yè)教育市場在全球推廣的項目,其以低廉的成本給這部分人群提供Oracle技術(shù)培訓(xùn),經(jīng)過系統(tǒng)化的實訓(xùn),讓這部分人群能夠迅速掌握Oracle最新的核心技術(shù),并能勝任企業(yè)大型數(shù)據(jù)庫管理、維護(hù)、開發(fā)工作。
如何合理創(chuàng)建Oracle數(shù)據(jù)庫索引的3個要求:
在Oracle數(shù)據(jù)庫中,創(chuàng)建索引雖然比較簡單。但是要合理的創(chuàng)建索引則比較困難了。筆者認(rèn)為,在創(chuàng)建索引時要做到三個適當(dāng),即在適當(dāng)?shù)谋砩?、適當(dāng)?shù)牧猩蟿?chuàng)建適當(dāng)數(shù)量的索引。雖然這可以通過一句話來概括優(yōu)化的索引的基本準(zhǔn)則,但是要做到這一點的話,需要數(shù)據(jù)庫管理員做出很大的努力。具體的來說,要做到這個三個適當(dāng)有如下幾個要求。
一、 根據(jù)表的大小來創(chuàng)建索引。
雖然給表創(chuàng)建索引,可以提高查詢的效率。但是數(shù)據(jù)庫管理員需要注意的是,索引也需要一定的開銷的。為此并不是說給所有的表都創(chuàng)建索引,那么就可以提高數(shù)據(jù)庫的性能。這個認(rèn)識是錯誤的。恰恰相反,如果不管三七二十一,給所有的表都創(chuàng)建了索引,那么其反而會給數(shù)據(jù)庫的性能造成負(fù)面的影響。因為此時濫用索引的開銷可能已經(jīng)遠(yuǎn)遠(yuǎn)大于由此帶來的性能方面的收益。所以筆者認(rèn)為,數(shù)據(jù)庫管理員首先需要做到,為合適的表來建立索引,而不是為所有的表建立索引。
一般來說,不需要為比較小的表創(chuàng)建索引。如在一個ERP系統(tǒng)的數(shù)據(jù)庫中,department表用來存儲企業(yè)部門的信息。一般企業(yè)的部分也就十幾個,最多不會超過一百個。這100條記錄對于人來說,可能算是比較多了。但是對于計算機來說,這給他塞塞牙縫都還不夠。所以,對類似的小表沒有必要建立索引。因為即使建立了索引,其性能也不會得到很大的改善。相反索引建立的開銷,如維護(hù)成本等等,要比這個要大。也就是說,付出的要比得到的多,顯然違反常理。
另外,就是對于超大的表,也不一定要建立索引。有些表雖然比較大,記錄數(shù)量非常的多。但是此時為這個表建立索引并一定的合適。如系統(tǒng)中有一張表,其主要用來保存數(shù)據(jù)庫中的一些變更信息。往往這些信息只給數(shù)據(jù)庫管理員使用。此時為這張表建立索引的話,反而不合適。因為這張表很少用到,只有在出問題的時候才需要查看。其次其即使查看,需要查詢的紀(jì)錄也不會很多,可能就是最近一周的更新記錄等等。對于對于一些超大的表,建立索引有時候往往不能夠達(dá)到預(yù)計的效果。而且在打表上建立索引,其索引的開銷要比普通的表大的多。那么到底是否給大表建立索引呢?筆者認(rèn)為,主要是看兩個方面的內(nèi)容。首先是需要關(guān)注一下,在這張大表中經(jīng)常需要查詢的記錄數(shù)量。一般來說,如果經(jīng)常需要查詢的數(shù)據(jù)不超過10%到15%的話,那就沒有必要為其建立索引的必要。因為此時建立索引的開銷可能要比性能的改善大的多。這個比例只是一個經(jīng)驗的數(shù)據(jù)。如果數(shù)據(jù)庫管理員需要得出一個比較精確的結(jié)論,那么就需要進(jìn)行測試分析。即數(shù)據(jù)庫管理員需要測試一下全表掃描的時間,看看其是否比建立索引后的查詢時間要長或者短。如果是長的話,則說明有建立索引的必要。但是如果沒有的話,則說明還是全表掃描速度來的快。此時也就沒有必要建立索引了。
總之,在考慮是否該為表建立索引時,一般來說小表沒有建立索引的必要。而對于打表的話,則需要進(jìn)行實際情況實際分析。簡單一點的,可以根據(jù)大致的比率來確定。如果要精確一點的,則可以進(jìn)行全表掃描性能分析,以判斷建立索引后是否真的如預(yù)期那樣改善了數(shù)據(jù)庫性能。
二、 根據(jù)列的特征來創(chuàng)建索引。
列的特點不同,索引創(chuàng)建的效果也不同。數(shù)據(jù)庫管理員需要了解為哪些列創(chuàng)建索引可以起到事倍功半的效果。同時也需要了解為哪些列創(chuàng)建索引反而起到的是事倍功半的效果。這有利于他們了解到底給為怎么樣的字段建立索引。
根據(jù)筆者的經(jīng)驗,往往為如下特征的列創(chuàng)建索引能夠起到比較明顯的效果。如對于一些重復(fù)內(nèi)容比較少的列,特別是對于那些定義了唯一約束的列。在這些列上建立索引,往往可以起到非常不錯的效果。如對于一些null值的列與非Null值的列混合情況下,如果用戶需要經(jīng)常查詢所有的非Null值記錄的列,則最好為其設(shè)置索引。如果經(jīng)常需要多表連接查詢,在用與連接的列上設(shè)置索引可以達(dá)到事半功倍的效果。
可見,索引設(shè)置的是否恰當(dāng),不僅跟數(shù)據(jù)庫設(shè)計架構(gòu)有關(guān),而且還跟企業(yè)的經(jīng)濟(jì)業(yè)務(wù)相關(guān)。為此,對于一些套裝軟件,雖然一開始數(shù)據(jù)庫管理員已經(jīng)做了索引的優(yōu)化工作。但是隨著后來經(jīng)濟(jì)數(shù)據(jù)的增加,這個索引的效果會越來越打折扣。這主要是因為記錄的表化影響到了索引優(yōu)化的效果。所以筆者建議各位數(shù)據(jù)庫管理員,即使采用的是大牌軟件公司的套裝軟件,也需要隔一段時間,如一年,對數(shù)據(jù)庫的索引進(jìn)行優(yōu)化。該去掉的去掉,該調(diào)整的調(diào)整,以提高數(shù)據(jù)庫的性能。
如在數(shù)據(jù)庫中有一張表是用來保存用戶信息的。其中有個字段身份證號碼,這是一個唯一的字段。在數(shù)據(jù)庫設(shè)計時,給這個字段創(chuàng)建了索引。但是當(dāng)這個數(shù)據(jù)庫投入使用之后,用戶不怎么輸入用戶的身份證號碼。而且平時也基本不按這個號碼來進(jìn)行查詢。當(dāng)記錄月來月多時,這個身份證號碼上的索引字段不但不能夠改善數(shù)據(jù)庫的查詢性能,反而成了雞肋。對于這些有很多NULL值的列,而且不會經(jīng)常查詢所有的非NULL值記錄的列,數(shù)據(jù)庫管理員要下決心,即使清除這些列上的索引。
所以說索引的優(yōu)化與調(diào)整是一個動態(tài)的過程,并不是說數(shù)據(jù)庫設(shè)計好之后就不需要經(jīng)過調(diào)整。數(shù)據(jù)庫管理員往往需要根據(jù)記錄的變化情況,來進(jìn)行適當(dāng)?shù)淖兏?。以提高索引的效果?/p>
三、 在一個表上創(chuàng)建多少索引合適?
雖然說,在表上創(chuàng)建索引的數(shù)量沒有限制,但是決不是越多越好。也就是說,在創(chuàng)建索引這項事情上,1+1〉2往往不成立。有時候,創(chuàng)建索引越多,其可能會得到適得其反的效果。那么在一個表上,到底給創(chuàng)建多少索引合適呢?這個沒有一個明確的標(biāo)準(zhǔn)。而是需要數(shù)據(jù)庫管理員根據(jù)實際的用途以及數(shù)據(jù)庫中記錄的情況,來進(jìn)行判斷。
通常來說,表的索引越多,其查詢的速度也就越快。但是,表的更新速度則會降低。這主要是因為表的更新(如往表中插入一條記錄)速度,反而隨著索引的增加而增加。這主要是因為,在更新記錄的同時需要更新相關(guān)的索引信息。為此,到底在表中創(chuàng)建多少索引合適,就需要在這個更新速度與查詢速度之間取得一個均衡點。如對于一些數(shù)據(jù)倉庫或者決策型數(shù)據(jù)庫系統(tǒng),其主要用來進(jìn)行查詢。相關(guān)的記錄往往是在數(shù)據(jù)庫初始化的時候倒入。此時,設(shè)置的索引多一點,可以提高數(shù)據(jù)庫的查詢性能。同時因為記錄不怎么更新,所以索引比較多的情況下,也不會影響到更新的速度。即使在起初的時候需要導(dǎo)入大量的數(shù)據(jù),此時也可以先將索引禁用掉。等到數(shù)據(jù)導(dǎo)入完畢后,再啟用索引??梢酝ㄟ^這種方式來減少索引對數(shù)據(jù)更新的影響。相反,如果那些表中經(jīng)常需要更新記錄,如一些事務(wù)型的應(yīng)用系統(tǒng),數(shù)據(jù)更新操作是家常便飯的事情。此時如果在一張表中建立過多的索引,則會影響到更新的速度。由于更新操作比較頻繁,所以對其的負(fù)面影響,要比查詢效率提升要大的多。此時就需要限制索引的數(shù)量,只在一些必要的字段上建立索引。
筆者在平時數(shù)據(jù)庫優(yōu)化時,往往會根據(jù)這些表的用途來為列設(shè)置索引??梢圆樵兿嚓P(guān)的動態(tài)視圖,看看對于這張表的操作,是更新操作(包括更新、刪除、插入等等)占的比例大,還是查詢操作占的比例大。當(dāng)過多的索引已經(jīng)影響到更新操作的速度時,則數(shù)據(jù)庫管理員就需要先禁用某些索引,以提高數(shù)據(jù)庫的性能。
總之,在適當(dāng)?shù)谋?、適當(dāng)?shù)牧猩辖⑦m當(dāng)?shù)乃饕?。這一句話包含的意思有很多,以上內(nèi)容只是一部分內(nèi)容。俗話說,師傅領(lǐng)進(jìn)門,修行靠自身。筆者在這里指能夠點到為止。一些具體的索引優(yōu)化內(nèi)容還是需要各位讀者在日常工作中去體會與總結(jié)
創(chuàng)建索引語法:
CREATE [UNIQUE] | [BITMAP] INDEX index_name
--unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2
--bitmap,創(chuàng)建位圖索引
[ASC|DESC],…] | [express])[TABLESPACE tablespace_name][PCTFREE n1]
--指定索引在數(shù)據(jù)塊中空閑空間
[STORAGE (INITIAL n2)][NOLOGGING]
--表示創(chuàng)建和重建索引時允許對表做DML操作,默認(rèn)情況下不應(yīng)該使用
[NOLINE][NOSORT];
--表示創(chuàng)建索引時不進(jìn)行排序,默認(rèn)不適用,如果數(shù)據(jù)已經(jīng)是按照該索引順序排列的可以使用
擴(kuò)展資料:
1、如果有兩個或者以上的索引,其中有一個唯一性索引,而其他是非唯一,這種情況下oracle將使用唯一性索引而完全忽略非唯一性索引
2、至少要包含組合索引的第一列(即如果索引建立在多個列上,只有它的第一個列被where子句引用時,優(yōu)化器才會使用該索引)
3、小表不要簡歷索引
4、對于基數(shù)大的列適合建立B樹索引,對于基數(shù)小的列適合簡歷位圖索引
5、列中有很多空值,但經(jīng)常查詢該列上非空記錄時應(yīng)該建立索引
6、經(jīng)常進(jìn)行連接查詢的列應(yīng)該創(chuàng)建索引
7、使用create index時要將最常查詢的列放在最前面
8、LONG(可變長字符串?dāng)?shù)據(jù),最長2G)和LONG RAW(可變長二進(jìn)制數(shù)據(jù),最長2G)列不能創(chuàng)建索引
9、限制表中索引的數(shù)量(創(chuàng)建索引耗費時間,并且隨數(shù)據(jù)量的增大而增大;索引會占用物理空間;當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),降低了數(shù)據(jù)的維護(hù)速度)
方法如下:
Oracle中建立索引,會提高查詢速度: create index 索引名 on 表名(列名);
例如:
create index index_userid on tbl_detail(userid);
如何找數(shù)據(jù)庫表的主鍵字段的名稱?
SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='AAA'; select * from dba_cons_columns where CONSTRAINT_NAME='SYS_AAA';
Oracle 在創(chuàng)建主鍵(可以不加constraint SYS_AAA),會為庫表自動創(chuàng)建索引,
索引的列為主鍵列。 并且當(dāng)庫表某些列名或者庫表名改變時候,
Oracle自動創(chuàng)建的索引SYS_AAA,中的索引列也會自動更新(類似于視圖),并且SYS_AAA會與名字更改后的庫表還是保持索引關(guān)系。 關(guān)鍵系統(tǒng)庫表: desc dba_constraints desc dba_cons_columns
desc dba_indexes desc dba_ind_columns desc DBA_TAB_COLUMNS
例子1:更改庫表的列名
ALTER TABLE AAA RENAME COLUMN ID TO AAA_ID; create table AAA ( ID NUMBER(8), NAME CHAR(20),
constraint SYS_AAA primary key(ID) );
//查找約束名字
select c.CONSTRAINT_NAME,c.table_name,cc.COLUMN_NAME from user_constraints c, user_cons_columns cc
where c.constraint_name=cc.constraint_name and c.table_name ='AAA' AND C.CONSTRAINT_TYPE='P';
CONSTRAINT_NAME TABLE_NAME COLUMN_NAME
SYS_AAA AAA ID
//查找索引
select index_name,index_type,uniqueness from user_indexes where table_name='AAA'; INDEX_NAME INDEX_TYPE UNIQUENES
1、可以把那些null值設(shè)置成一個特殊的值,比如"N/A"
2、where nvl(col,0) =0在col字段上創(chuàng)建一個函數(shù)索引。create index ind_col ontable(nvl(col,0));
這樣就能用索引了。
3、輸入代碼:CREATE?INDEX?INDEX_NAME?ON?TABLE_NAME(COLUMN_NAME)。
4、給一個表里有的可空字段增加一個默認(rèn)值alter table? 表名 add? constraint??? itemname? defult(0) for 對應(yīng)表字段。itemname 為自定義的名稱。
5、給表增加字段,aleter table 表名 add itemname?? int null item name,為字段名
6、更新表字段類型,ALTER?TABLE 表名 ALTER?COLUMN 字段名,新的類型。
對三個字段建立索引:
create index Stuname on student(name);
create index Stusex on student(sex);
create index Stugrade on student(grade);
注意的問題,考慮是不是要建立唯一索引(unique),如果有學(xué)號的話,可以考慮建立唯一索引引。
再就是對經(jīng)常查詢,但又相對穩(wěn)定的可以建立聚簇索引,提高查詢效率
當(dāng)前題目:如何建立索引oracle,如何建立索引mysql
網(wǎng)頁鏈接:http://www.rwnh.cn/article34/dsdghse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、App設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)