· 通過全表掃描的方式訪問數(shù)據(jù);
成都創(chuàng)新互聯(lián)公司是一家專業(yè)的成都網(wǎng)站建設(shè)公司,我們專注網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷、企業(yè)網(wǎng)站建設(shè),外鏈,1元廣告為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網(wǎng)理念。從網(wǎng)站結(jié)構(gòu)的規(guī)劃UI設(shè)計到用戶體驗提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
· 通過ROWID訪問數(shù)據(jù);
· 通過索引的方式訪問數(shù)據(jù);
· Oracle順序讀取表中所有的行,并逐條匹配WHERE限定條件。
· 采用多塊讀的方式進(jìn)行全表掃描,可以有效提高系統(tǒng)的吞吐量,降低I/O次數(shù)。
· 即使創(chuàng)建索引,Oracle也會根據(jù)CBO的計算結(jié)果,決定是否使用索引。
注意事項:
· 只有全表掃描時才可以使用多塊讀。該方式下,單個數(shù)據(jù)塊僅訪問一次。
· 對于數(shù)據(jù)量較大的表,不建議使用全表掃描進(jìn)行訪問。
· 當(dāng)訪問表中的數(shù)據(jù)量超過數(shù)據(jù)總量的5%—10%時,通常Oracle會采用全表掃描的方式進(jìn)行訪問。
· 并行查詢可能會導(dǎo)致優(yōu)化器選擇全表掃描的方式。1.2ROWID訪問表
· Rowid是數(shù)據(jù)存放在數(shù)據(jù)庫中的物理地址,能夠唯一標(biāo)識表中的一條數(shù)據(jù)。
· Rowid指出了一條記錄所在的數(shù)據(jù)文件、塊號以及行號的位置,因此通過ROWID定位單行數(shù)據(jù)是最快的方法。
注意事項:
· Rowid作為一個偽列,其數(shù)值并不存儲在數(shù)據(jù)庫中,當(dāng)查詢時才進(jìn)行計算。
· Rowid除了在同一集簇中可能不唯一外,每條記錄的Rowid唯一。1.3 INDEX訪問表
· 通過索引查找相應(yīng)數(shù)據(jù)行的Rowid,再根據(jù)Rowid查找表中實際數(shù)據(jù)的方式稱為“索引查找”或者“索引掃描”。
· 一個Rowid對應(yīng)一條數(shù)據(jù)行(根據(jù)Rowid查找結(jié)果,僅需要對Rowid相應(yīng)數(shù)據(jù)的數(shù)據(jù)塊進(jìn)行一次I/O操作),因此該方式屬于“單塊讀”。
· 對于索引,除了存儲索引的數(shù)據(jù)外,還保存有該數(shù)據(jù)對應(yīng)的Rowid信息。
· 索引掃描分為兩步:1)掃描索引確定相應(yīng)的Rowid信息。 2)根據(jù)Rowid從表中獲得對應(yīng)的數(shù)據(jù)。
注意事項:
· 對于選擇性高的數(shù)據(jù)行,索引的使用會提升查詢的性能。但對于DML操作,尤其是批量數(shù)據(jù)的操作,可能會導(dǎo)致性能的降低。
· 全表掃描的效率不一定比索引掃描差,關(guān)鍵看數(shù)據(jù)在數(shù)據(jù)塊上的具體分布。
索引是關(guān)系數(shù)據(jù)庫中用于存放每一條記錄的一種對象,主要目的是加快數(shù)據(jù)的讀取速度和完整性檢查。建立索引是一項技術(shù)性要求高的工作。一般在數(shù)據(jù)庫設(shè)計階段的與數(shù)據(jù)庫結(jié)構(gòu)一道考慮。應(yīng)用系統(tǒng)的性能直接與索引的合理直接有關(guān)。
(1) 單列索引
單列索引是基于單個列所建立的索引。
(2) 復(fù)合索引
復(fù)合索引是基于兩列或是多列的索引,在同一張表上可以有多個索引,但是要求列的組合必須不同。
(1) 重命名索引
(2) 合并索引
(表使用一段時間后在索引中會產(chǎn)生碎片,此時索引效率會降低,可以選擇重建索引或者合并索引,合并索引方式更好些,無需額外存儲空間,代價較低)
(3) 重建索引
方式一:刪除原來的索引,重新建立索引
當(dāng)不需要時可以將索引刪除以釋放出硬盤空間。命令如下:
例如:
注:當(dāng)表結(jié)構(gòu)被刪除時,有其相關(guān)的所有索引也隨之被刪除。
方式二: Alter index 索引名稱 rebuild;
· 通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
· 索引可以大大加快數(shù)據(jù)的檢索速度,這是創(chuàng)建索引的最主要的原因。
· 可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。
· 在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。
· 通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
· 索引的層次不要超過4層。
· 創(chuàng)建索引和維護(hù)索引要耗費(fèi)時間,這種時間隨著數(shù)據(jù)量的增加而增加。
· 除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
· 當(dāng)對表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時候,索引也要動態(tài)的維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。
· 更新數(shù)據(jù)的時候,系統(tǒng)必須要有額外的時間來同時對索引進(jìn)行更新,以維持?jǐn)?shù)據(jù)和索引的一致性。
1) 不恰當(dāng)?shù)乃饕坏谑聼o補(bǔ),反而會降低系統(tǒng)性能。因為大量的索引在進(jìn)行插入、修改和刪除操作時比沒有索引花費(fèi)更多的系統(tǒng)時間。
1) 應(yīng)該建索引的列
· 在經(jīng)常需要搜索的列上,可以加快搜索的速度;
· 在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);
· 在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
· 在經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,因為索引已經(jīng)排序,其指定的范圍是連續(xù)的;
· 在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
· 在經(jīng)常使用在WHERE子句中的列上面創(chuàng)建索引,加快條件的判斷速度。
2) 不應(yīng)該建索引的列
· 在大表上建立索引才有意義,小表無意義。
· 對于那些在查詢中很少使用或者參考的列不應(yīng)該創(chuàng)建索引。
· 對于那些只有很少數(shù)據(jù)值的列也不應(yīng)該增加索引。比如性別,在查詢的結(jié)果中,結(jié)果集的數(shù)據(jù)行占了表中數(shù)據(jù)行的很大比例,。增加索引,并不能明顯加快檢索速度。
· 對于那些定義為blob數(shù)據(jù)類型的列不應(yīng)該增加索引。這是因為,這些列的數(shù)據(jù)量要么相當(dāng)大,要么取值很少。
· 當(dāng)修改性能遠(yuǎn)遠(yuǎn)大于檢索性能時,不應(yīng)該創(chuàng)建索引。
一個表中有幾百萬條數(shù)據(jù),對某個字段加了索引,但是查詢時性能并沒有什么提高,這主要可能是oracle的索引限制造成的。Oracle的索引有一些索引限制,在這些索引限制發(fā)生的情況下,即使已經(jīng)加了索引,oracle還是會執(zhí)行一次全表掃描,查詢的性能不會比不加索引有所提高,反而可能由于數(shù)據(jù)庫維護(hù)索引的系統(tǒng)開銷造成性能更差。
下面的查詢即使在djlx列有索引,查詢語句仍然執(zhí)行一次全表掃描。
把上面的語句改成如下的查詢語句,這樣,在采用基于規(guī)則的優(yōu)化器而不是基于代價的優(yōu)化器(更智能)時,將會使用索引。
特別注意:通過把不等于操作符改成OR條件,就可以使用索引,避免全表掃描。
使用IS NULL或IS NOT NULL同樣會限制索引的使用。因此在建表時,把需要索引的列設(shè)成NOT NULL。如果被索引的列在某些行中存在NULL值,就不會使用這個索引(除非索引是一個位圖索引)。
如果不使用基于函數(shù)的索引,那么在SQL語句的WHERE子句中對存在索引的列使用函數(shù)時,會使優(yōu)化器忽略掉這些索引。 下面的查詢不會使用索引(只要它不是基于函數(shù)的索引)
也是比較難于發(fā)現(xiàn)的性能問題之一。比如:bdcs_qlr_xz中的zjh是NVARCHAR2類型,在zjh字段上有索引。如果使用下面的語句將執(zhí)行全表掃描。
因為Oracle會自動把查詢語句改為
特別注意:不匹配的數(shù)據(jù)類型之間比較會讓Oracle自動限制索引的使用,即便對這個查詢執(zhí)行Explain Plan也不能讓您明白為什么做了一次“全表掃描”。
(1) 索引無效
(2) 索引有效
Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4
oracle 索引什么時候重建和重建方法討論
分類:數(shù)據(jù)庫技術(shù) 字號: 大大中中小小 索引什么時候需要重建和重建的方法
一提到索引,大家都知道,但是怎樣建索引,什么時候重建索引,重建索引用什么方法,可能有的就不太清楚了,我根據(jù)一些資料簡單的整理一點,如果哪里不對或是不妥請大家指點,希望大家有更好經(jīng)驗也share出來。
索引的目的是為了加快尋找數(shù)據(jù)的速度,但是如果對表經(jīng)常做改動,則索引也會相應(yīng)改動,時間長了,查詢速度的效率就會降低,就有可能要重建索引,那么什么時候需要重建索引和用什么方法重建索引可能是大家關(guān)心的。
一. 索引在內(nèi)部進(jìn)行自身的管理以確保對數(shù)據(jù)行的快速訪問。但是數(shù)據(jù)表中大量的活動會導(dǎo)致oracle索引動態(tài)地對自身的進(jìn)行重新配置,這些配置包括三個方面:
1.索引分割
當(dāng)新數(shù)據(jù)行產(chǎn)生的索引節(jié)點要建立在現(xiàn)有級別上時,出現(xiàn)此動作。
2.索引生成
在某些位置,索引達(dá)到此級索引的最大容量的時候,就會生成更深一級的索引結(jié)構(gòu)。
3.索引節(jié)點的刪除
你可能了解到,刪除表中的數(shù)據(jù)行后,索引中相應(yīng)的節(jié)點不會從物理意義上刪除,也沒有從索引中刪除此項目。而是從邏輯上刪除此索引項目,并在索引樹中留下了一個“死“節(jié)點,當(dāng)索引刪除了葉節(jié)點或是生成了過深的的級別層次后,就需要進(jìn)行重建。
二 索引的種類:
a.B-tree(B樹)索引
b.壓縮B樹索引
c.Bitmap(位圖)索引
d.函數(shù)索引
e.Reverse Key Index(反向鍵索引)
f.Index Organized Table(索引組織表)
三 下面分別對各種索引進(jìn)行說明
在進(jìn)行介紹前先說明幾個術(shù)語:
高基數(shù):簡單理解就是表中列的不同值多
低基數(shù):建單理解就是表中的列的不同值少
以刪除的葉節(jié)點數(shù)量:指得是數(shù)據(jù)行的delete操作從邏輯上刪除的索引節(jié)點的數(shù)量,要記住oracle在刪除數(shù)據(jù)行后,將“死“節(jié)點保留在索引中,這樣做可以加快sql刪除操作的速度,因此oracle刪除數(shù)據(jù)行后可以不必重新平衡索引。
索引高度:索引高度是指由于數(shù)據(jù)行的插入操作而產(chǎn)生的索引層數(shù),當(dāng)表中添加大量數(shù)據(jù)時,oracle將生成索引的新層次以適應(yīng)加入的數(shù)據(jù)行,因此, oracle索引可能有4層,但是這只會出現(xiàn)在索引數(shù)中產(chǎn)生大量插入操作的區(qū)域。Oracle索引的三層結(jié)構(gòu)可以支持?jǐn)?shù)百萬的項目,而具備4層或是更多層的需要重建。
每次索引訪問的讀取數(shù):是指利用索引讀取一數(shù)據(jù)行時所需要的邏輯I/O操作數(shù),邏輯讀取不必是物理讀取,因為索引的許多內(nèi)容已經(jīng)保存在數(shù)據(jù)緩沖區(qū),然而,任何數(shù)據(jù)大于10的索引都需要重建。
1. B-tree(B樹)索引
是現(xiàn)代關(guān)系型數(shù)據(jù)庫中最常用的索引。除了存儲索引數(shù)據(jù)外,還存儲一個行ID,用來指出該行其余數(shù)據(jù)存儲在這個被索引表中的什么地方。該索引以一種數(shù)結(jié)構(gòu)格式存儲這些值。
Oracle建議如果表經(jīng)過排序,當(dāng)返回40%一下的數(shù)據(jù)時使用索引,如果高于40%則使用全表掃描,如果沒有經(jīng)過排序,則當(dāng)返回7%以下時,使用索引。看表是否排序,可以看dba_indexes字典中的CLUSTERING_FACTOR列,如果與表占用的數(shù)據(jù)塊數(shù)相近,則經(jīng)過了排序,如果與行數(shù)相近,則沒有排序。那么什么時候重建呢?我們可以利用analyze index …….. compute statistics 對表進(jìn)行分析。然后察看dba_indexes中的blevel。這列是說明索引從根塊到葉快的級別,或是深度。如果級別大于等于4。則需要重建,如下:
Select index_name,blevel from dba_indexeswhere blevel=4.
另一個從重建中受益的指標(biāo)顯然是當(dāng)該索引中的被刪除項占總的項數(shù)的百分比。如果在20%以上時,也應(yīng)當(dāng)重建,如下
SQLanlyze index ------ validatestructure
SQLselect(del_lf_rows_len/lf_rows_len)*100 from index_stats where 刪除并從頭開始建立索引。
b. 使用alter index -------- rebuild 命令重建索引
c. 使用alter index -------- coalesce命令重建索引。
下面討論一下這三種方法的優(yōu)缺點:
1).刪除并從頭開始建索引:方法是最慢的,最耗時的。一般不建議。
2).Alter index ---- rebuild 快速重建索引的一種有效的辦法,因為使用現(xiàn)有索引項來重建新索引,如果客戶操作時有其他用戶在對這個表操作,盡量使用帶online參數(shù)來最大限度的減少索引重建時將會出現(xiàn)的任何加鎖問題,alter index ------- rebuild online.但是,由于新舊索引在建立時同時存在,因此,使用這種技巧則需要有額外的磁盤空間可臨時使用,當(dāng)索引建完后把老索引刪除,如果沒有成功,也不會影響原來的索引。利用這種辦法可以用來將一個索引以到新的表空間。
Alter index ------ rebuild tablespace -----。
這個命令的執(zhí)行步驟如下:
首先,逐一讀取現(xiàn)有索引,以獲取索引的關(guān)鍵字。
其次,按新的結(jié)構(gòu)填寫臨時數(shù)據(jù)段。
最后,一旦操作成功,刪除原有索引樹,降臨時數(shù)據(jù)段重命名為新的索引。
需要注意的是alterindex ---rebuild 命令中必須使用tablespace字句,以保證重建工作是在現(xiàn)有索引相同的表空間進(jìn)行。
3).alter index ----- coalesce 使用帶有coalesce參數(shù)時重建期間不需要額外空間,它只是在重建索引時將處于同一個索引分支內(nèi)的葉塊拼合起來,這最大限度的減少了與查詢過程中相關(guān)的潛在的加鎖問題,但是,coalesce選項不能用來講一個索引轉(zhuǎn)移到其他表空間。
2.壓縮B樹索引
當(dāng)B樹索引基于大表時,尤其是當(dāng)基于數(shù)據(jù)倉庫或決策支持系統(tǒng)中的大表時,這些索引會耗費(fèi)大量的存儲空間,壓縮(compressed)B樹索引用來最大限度的減少某些類型的B樹索引使用的空間。當(dāng)一個B樹索引得到壓縮時,被索引的獵的重復(fù)出現(xiàn)就被消除掉,進(jìn)而減少了存儲索引的總的存儲空間。例如:
壓縮前:smith每次出現(xiàn)還要存儲它的相關(guān)的rowid.
姓 關(guān)聯(lián)rowid
smith AAABSOAAEAAAABTAAB
smith AAABSOAAEAAAABTAAC
smith AAABSOAAEAAAABTAAD
壓縮后:smith項和rowid指存儲一次。
smith AAABSOAAEAAAABTAAB,AAABSOAAEAAAABTAAB, AAABSOAAEAAAABTAAB
創(chuàng)建方法:
SQLcreate index index_name ontable_name(column_name)
tablespace tablespace_name
compress;
另一種方法:
SQLalter index index_name rebuildcompress;
3. itmap(位圖)索引。
B樹索引在數(shù)據(jù)具有高基數(shù)的列工作的最好,對于低基數(shù)的列,位圖索引可能是更有效的選擇。位圖索引創(chuàng)建表行的一個二進(jìn)制映像,并把映像存儲在索引塊中,這種類型的索引的DML操作少,長度大并且含有極少不同的值得列特別有用。位圖索引不應(yīng)當(dāng)用在頻繁發(fā)生insert,update,delete操作的表上,這些dml操作在性能方面的代價很高,因為,他們會引起位圖級的加鎖發(fā)生,而且要求動態(tài)的重建所有可能值的位圖。為圖索引最適合數(shù)據(jù)倉庫和決策支持系統(tǒng)。
4.基于函數(shù)的索引
當(dāng)把一個函數(shù)運(yùn)用于被索引的列上時,該列德索引都變得無效,基于函數(shù)的索引就是為了解決這個問題。
5.反向鍵索引
是一種特殊類型的B樹索引,在索引基于含有序數(shù)的列時使非常有用的,如果一個傳統(tǒng)的B樹索引基于一個含有這種數(shù)據(jù)的列,往往會產(chǎn)生許多級,由于B樹索引有 4級以上的深度會降低性能,因此反向鍵索引更適合這種類型,反向鍵索引通過簡單的煩象被索引的列中的數(shù)據(jù)來解決問題,他首先反向每個列鍵值的字節(jié),然后在反向后的新數(shù)據(jù)上進(jìn)行索引,而新數(shù)據(jù)在值的范圍上的分布通常比原來的有序數(shù)更均勻。
6.索引組織表
由于B樹、位圖、反向鍵索引的使用而引起的性能將會導(dǎo)致這樣的事實,這些索引中的項目直接指向索引基表中對應(yīng)數(shù)據(jù)的行ID,這是從表行沒有按任何特定的順序來物理地存儲表中檢索表行的一種有效方法,這種表叫做堆表,oracle大多數(shù)表中以一種堆疊方式存儲行數(shù)據(jù),因為行以一種或多或少的隨機(jī)方式被分配給表內(nèi)的塊,之所以出現(xiàn)這種隨機(jī)性,是因為oracle在決定把一個行存儲在何處時并不考慮改行的內(nèi)容,oracle只是把該行存儲在它從該表的freelist 上所發(fā)現(xiàn)的第一個塊中。
如果希望按一種指定順序來存儲一個表的數(shù)據(jù),就不能使用堆表,為此oracle提供了索引組織表,索引組織表不是存儲一個指向行數(shù)據(jù)的其余部分存儲在了何處的行的ID指針,而是把行數(shù)據(jù)全部存儲在索引本身內(nèi),這產(chǎn)生了兩個性能好處:
n 表行按索引順序來存儲。
n 使用B樹索引時引起的先讀取索引后讀取表鎖使用的額外I/O操作得到消除。
例如:
sqlcreate table emp
(last_name varchar2(9) primary key,
first_name varchar2(9),
hire_date date)
organization index tablespace users
pctthreshold 25
including first name
overflow tablespace qyl
mapping table;
所有索引組織表在將要作為索引基礎(chǔ)的那一列上都必須有一個主鍵約束,索引組織表不能含有唯一性約束或是被聚簇。
下面說明各個參數(shù)的含義:
organization index:說明該表是索引組織表
pctthreshold :指定整個數(shù)據(jù)塊的什么百分比要保持打開,以便存儲一個與主鍵值相關(guān)聯(lián)的行數(shù)據(jù),其中主鍵值必須在0到50之間(50是默認(rèn)值)
including : 指定在行長度超過pctthershold中所設(shè)置的大小時按那一列 把行分解成兩段
overflow tablespace :指定在行長度超過pctthreshold中設(shè)置的大小時行數(shù)的的另一部分存儲到的表空間。
Mapping table:致使在創(chuàng)建索引組織表的位圖索引時所必需的一個關(guān)聯(lián)映像表的創(chuàng)建。
以上是我根據(jù)一些資料對索引的一個簡單闡述,大家可能有不同的見解,希望對大家有幫助,那些不妥的地方還希望大家提出來。
參考資料:ocp困惑racle9i性能調(diào)整
oracle statspack 高性能調(diào)整技術(shù)
[@more@]
analyze index t_id_ind validate structure
select (del_lf_rows_len/lf_rows_len)*100 from index_stats
20%
b. 使用alter index t_id_ind rebuild 命令重建索引
c. 使用alter index t_id_ind coalesce命令重建索引。
alter indext_id_ind rebuild online.
但是,由于新舊索引在建立時同時存在,因此,使用這種技巧則需要有額外的磁盤空間可臨時使用,當(dāng)索引建完后把老索引刪除,如果沒有成功,也不會影響原來的索引。利用這種辦法可以用來將一個索引以到新的表空間。
Alter index ------ rebuild tablespace -----。
這個命令的執(zhí)行步驟如下:
首先,逐一讀取現(xiàn)有索引,以獲取索引的關(guān)鍵字。
其次,按新的結(jié)構(gòu)填寫臨時數(shù)據(jù)段。
最后,一旦操作成功,刪除原有索引樹,降臨時數(shù)據(jù)段重命名為新的索引。
需要注意的是alter index ---rebuild 命令中必須使用tablespace字句,以保證重建工作是在現(xiàn)有索引相同的表空間進(jìn)行
alter index ----- coalesce 使用帶有coalesce參數(shù)時重建期間不需要額外空間,它只是在重建索引時將處于同一個索引分支內(nèi)的葉塊拼合起來,這最大限度的減少了與查詢過程中相關(guān)的潛在的加鎖問題,但是,coalesce選項不能用來講一個索引轉(zhuǎn)移到其他表空間
你說的慢一半,是在你插入了50萬數(shù)據(jù)的時候,估計是查詢慢了吧。因為按你說的還沒到刪除的時候呢。查詢慢要看看你的查詢的語句的執(zhí)行計劃,是否使用了合適的索引。如果索引錯了,那么慢是正常的。可以用hint指定索引,從而保證執(zhí)行計劃穩(wěn)定。
對于你這樣的周期性維護(hù)的大表,可以做31個分區(qū),每天一個,一個月內(nèi)循環(huán)使用。不需要保留的數(shù)據(jù)可以以天為單位truncate掉一個或多個分區(qū)的數(shù)據(jù),索引采用分區(qū)索引,truncate分區(qū)不影響索引的使用。
有一種猜測,是你的索引建的不對。
你的查詢語句的查詢條件是什么?是單列查詢嗎?如果pwd指password,至少我覺得不會有按password單列查詢的語句吧。
A. oracle 提供了收集數(shù)據(jù)庫統(tǒng)計信息的系統(tǒng)包,例如統(tǒng)計scott用戶信息只需要執(zhí)行:
exec dbms_stats.gather_schema_stats(
ownname = 'SCOTT',
options = 'GATHER AUTO',
estimate_percent = dbms_stats.auto_sample_size,
method_opt = 'for all columns size repeat',
degree = 15
);
dbms_stat.gather_schema_stats 的參數(shù)說請查相關(guān)資料,這里就不詳述了。
B. 要定期執(zhí)行用戶統(tǒng)計信息很簡單,只要在 oracle job 中調(diào)用這個過程就可以了,設(shè)置好初次調(diào)用時間和調(diào)用時間間隔即可。
以上的操作都能在plsql中操作。
------索引名不能重復(fù),如果要重新建同名索引,必須把以前的索引刪掉在建索引
-----刪除索引
drop index 索引名;
-----創(chuàng)建索引
create index 索引名 on 表名 (表中的字段,表中的字段)
tablespace 指定的表空間
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
當(dāng)索引的碎片過多時,會影響執(zhí)行查詢的速度,從而影響到我們的工作效率。這時候采取的最有利的措施莫過于重建索引了。本文主要介紹了Oracle數(shù)據(jù)庫中檢查索引碎片并重建索引的過程,接下來我們就開始介紹這一過程。 重建索引的步驟如下: 1. 確認(rèn)基本信息 登入數(shù)據(jù)庫,找到專門存放index 的tablespace,并且這個tablespace下所有index的owner都是tax.將index專門存放在一個獨立的tablespace, 與數(shù)據(jù)表的tablespace分離,是常用的數(shù)據(jù)庫設(shè)計方法。 2. 查找哪些index需要重建 通過anlyze index .... validate structure命令可以分析單個指定的index,并且將單個index 分析的結(jié)果存放到 index_stats試圖下。一般判斷的依據(jù)是: height 4 pct_used 50% del_lf_rows / lf_rows +0.001 0.03 g ) 3. google上下載了遍歷所有index腳本 發(fā)現(xiàn)anlyze index .... validate structure只能填充單個index分析信息,于是google了下,從網(wǎng)上下了個Loop 腳本,遍歷索引空間下所有的索引名字,并且可以把所有index的分析信息存放到自己建立的一個用戶表中。 4. anlyze index 鎖定index 發(fā)現(xiàn)下載的腳本不好用,應(yīng)為anlyze index在分析索引前要爭取獨占鎖,鎖住index,很明顯有些index正在被應(yīng)用系統(tǒng)的使用,所以運(yùn)行anlyze失敗。這里吸取的教訓(xùn)是,盡量晚上做這種事。但是本人比較喜歡準(zhǔn)時回家,所以在語句中添加Exception Handler,拋出anlyze index執(zhí)行失敗的那些index 名稱,使腳本正常運(yùn)行完畢。并且根據(jù)打印到前臺的index name手動執(zhí)行那些index分析。 5. 總結(jié) 雖然發(fā)現(xiàn)522個index中有160個符合上面的判斷的依據(jù)。但是發(fā)現(xiàn)索引都不大,而那些擁有百萬leaf的索引又沒有符合上面的判斷條件,所以結(jié)論是無需index rebuild online. 沒有啥碎片。 6.什么時候可以rebuild index呢? rebuild index online,對那些有大量DML操作的大索引是有益的。可以每個月季度做一次針對較大索引的rebuild。
名稱欄目:oracle怎么刷新索引 怎么更新索引
鏈接分享:http://chinadenli.net/article44/hihjhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站導(dǎo)航、網(wǎng)站制作、定制開發(fā)、做網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(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)