bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

包含oracle索引如何維護的詞條

高手救我,oracle中如何對頻繁更新的表索引進行維護

你說的慢一半,是在你插入了50萬數(shù)據(jù)的時候,估計是查詢慢了吧。因為按你說的還沒到刪除的時候呢。查詢慢要看看你的查詢的語句的執(zhí)行計劃,是否使用了合適的索引。如果索引錯了,那么慢是正常的??梢杂胔int指定索引,從而保證執(zhí)行計劃穩(wěn)定。

專業(yè)領(lǐng)域包括成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、商城網(wǎng)站建設(shè)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網(wǎng)站設(shè)計及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

對于你這樣的周期性維護的大表,可以做31個分區(qū),每天一個,一個月內(nèi)循環(huán)使用。不需要保留的數(shù)據(jù)可以以天為單位truncate掉一個或多個分區(qū)的數(shù)據(jù),索引采用分區(qū)索引,truncate分區(qū)不影響索引的使用。

有一種猜測,是你的索引建的不對。

你的查詢語句的查詢條件是什么?是單列查詢嗎?如果pwd指password,至少我覺得不會有按password單列查詢的語句吧。

Oracle數(shù)據(jù)訪問和索引的使用

· 通過全表掃描的方式訪問數(shù)據(jù);

· 通過ROWID訪問數(shù)據(jù);

· 通過索引的方式訪問數(shù)據(jù);

· Oracle順序讀取表中所有的行,并逐條匹配WHERE限定條件。

· 采用多塊讀的方式進行全表掃描,可以有效提高系統(tǒng)的吞吐量,降低I/O次數(shù)。

· 即使創(chuàng)建索引,Oracle也會根據(jù)CBO的計算結(jié)果,決定是否使用索引。

注意事項:

· 只有全表掃描時才可以使用多塊讀。該方式下,單個數(shù)據(jù)塊僅訪問一次。

· 對于數(shù)據(jù)量較大的表,不建議使用全表掃描進行訪問。

· 當(dāng)訪問表中的數(shù)據(jù)量超過數(shù)據(jù)總量的5%—10%時,通常Oracle會采用全表掃描的方式進行訪問。

· 并行查詢可能會導(dǎo)致優(yōu)化器選擇全表掃描的方式。1.2ROWID訪問表

· Rowid是數(shù)據(jù)存放在數(shù)據(jù)庫中的物理地址,能夠唯一標識表中的一條數(shù)據(jù)。

· Rowid指出了一條記錄所在的數(shù)據(jù)文件、塊號以及行號的位置,因此通過ROWID定位單行數(shù)據(jù)是最快的方法。

注意事項:

· Rowid作為一個偽列,其數(shù)值并不存儲在數(shù)據(jù)庫中,當(dāng)查詢時才進行計算。

· 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ù)塊進行一次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ù)的參考完整性方面特別有意義。

· 在使用分組和排序子句進行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。

· 通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。

· 索引的層次不要超過4層。

· 創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加。

· 除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。

· 當(dāng)對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度。

· 更新數(shù)據(jù)的時候,系統(tǒng)必須要有額外的時間來同時對索引進行更新,以維持數(shù)據(jù)和索引的一致性。

1) 不恰當(dāng)?shù)乃饕坏谑聼o補,反而會降低系統(tǒng)性能。因為大量的索引在進行插入、修改和刪除操作時比沒有索引花費更多的系統(tǒng)時間。

1) 應(yīng)該建索引的列

· 在經(jīng)常需要搜索的列上,可以加快搜索的速度;

· 在作為主鍵的列上,強制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu);

· 在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;

· 在經(jīng)常需要根據(jù)范圍進行搜索的列上創(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)修改性能遠遠大于檢索性能時,不應(yīng)該創(chuàng)建索引。

一個表中有幾百萬條數(shù)據(jù),對某個字段加了索引,但是查詢時性能并沒有什么提高,這主要可能是oracle的索引限制造成的。Oracle的索引有一些索引限制,在這些索引限制發(fā)生的情況下,即使已經(jīng)加了索引,oracle還是會執(zhí)行一次全表掃描,查詢的性能不會比不加索引有所提高,反而可能由于數(shù)據(jù)庫維護索引的系統(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) 索引有效

如何加速Oracle大批量數(shù)據(jù)處理?

一、 提高DML操作的辦法:\x0d\x0a簡單說來:\x0d\x0a1、暫停索引,更新后恢復(fù).避免在更新的過程中涉及到索引的重建.\x0d\x0a2、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.\x0d\x0a3、創(chuàng)建一臨時的大的表空間用來應(yīng)對這些更新動作.\x0d\x0a\x0d\x0a4、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.\x0d\x0a\x0d\x0a5、創(chuàng)建一臨時的大的表空間用來應(yīng)對這些更新動作.\x0d\x0a\x0d\x0a6、加大排序緩沖區(qū)\x0d\x0a alter session set sort_area_size=100000000;\x0d\x0a insert into tableb select * from tablea;\x0d\x0a commit;\x0d\x0a\x0d\x0a如果UPDATE的是索引字段,就會涉及到索引的重建,暫停索引不會提高多少的速度,反而有可能降低UPDATE速度,\x0d\x0a因為在更新是索引可以提高數(shù)據(jù)的查詢速度,重建索引引起的速度降低影響不大。\x0d\x0a\x0d\x0aORACLE優(yōu)化修改參數(shù)最多也只能把性能提高15%,大部分都是SQL語句的優(yōu)化!\x0d\x0a\x0d\x0aupdate總體來說比insert要慢 :\x0d\x0a幾點建議: \x0d\x0a 1、如果更新的數(shù)據(jù)量接近整個表,就不應(yīng)該使用index而應(yīng)該采用全表掃描 \x0d\x0a 2、減少不必要的index,因為update表通常需要update index \x0d\x0a 3、如果你的服務(wù)器有多個cpu,采用parellel hint,可以大幅度的提高效率\x0d\x0a 另外,建表的參數(shù)非常重要,對于更新非常頻繁的表,建議加大PCTFREE的值,以保證數(shù)據(jù)塊中有足夠的空間用于UPDATE, 從而降低CHAINED_ROWS。 \x0d\x0a\x0d\x0a二、 各種批量DML操作:\x0d\x0a(1)、oracle批量拷貝:\x0d\x0aset arraysize 20\x0d\x0a set copycommit 5000\x0d\x0a copy from username/password@oraclename append table_name1\x0d\x0a using select * from table_name2;\x0d\x0a (2)、常規(guī)插入方式:\x0d\x0a insert into t1 select * from t;\x0d\x0a 為了提高速度可以使用下面方法,來減少插入過程中產(chǎn)生的日志:\x0d\x0a alter table t1 nologging;\x0d\x0ainsert into t1 select * from t;\x0d\x0acommit;\x0d\x0a (3)、CTAS方式:\x0d\x0a create table t1\x0d\x0aas\x0d\x0aselect * from t;\x0d\x0a為了提高速度可以使用下面方法,來減少插入過程中產(chǎn)生的日志,并且可以制定并行度:\x0d\x0acreate table t1 nologging parallel(degree 2) as select * from t;\x0d\x0a (4)、Direct-Path插入:\x0d\x0a insert /*+append*/ into t1 select * from t;\x0d\x0a commit;\x0d\x0a 為了提高速度可以使用下面方法,來減少插入過程中產(chǎn)生的日志:\x0d\x0a alter table t1 nologging;\x0d\x0a insert /*+append*/ into t1 select * from t;\x0d\x0a \x0d\x0a Direct-Path插入特點:\x0d\x0a1、 append只在insert ? select ?中起作用,像insert /*+ append */ into t values(?)這類的語句是不起作用的。在update、delete操作中,append也不起作用。\x0d\x0a2、 Direct-Path會使數(shù)據(jù)庫不記錄直接路徑導(dǎo)入的數(shù)據(jù)的重做日志,會對恢復(fù)帶來麻煩。\x0d\x0a3、 Direct-Path直接在表段的高水位線以上的空白數(shù)據(jù)塊中寫數(shù)據(jù),不會重用高水位線以下的空間,會對空間的使用造成一定的浪費,對查詢的性能也會造成一定的影響。而常規(guī)插入會優(yōu)先考慮使用高水位線之下有空閑空間存在的數(shù)據(jù)塊。因此理論上Direct-Path插入會比常規(guī)插入速度更快,因為Direct-Path直接使用新數(shù)據(jù)塊,而常規(guī)插入要遍歷freelist獲取可用空閑數(shù)據(jù)塊,如果同 nologging 配合,這種速度優(yōu)勢會更加明顯。\x0d\x0a4、 以append方式插入記錄后,要執(zhí)行commit,才能對表進行查詢。否則會出現(xiàn)錯誤:ORA-12838: 無法在并行模式下修改之后讀/修改對象。\x0d\x0a5、 用append導(dǎo)入數(shù)據(jù)后,如果沒有提交或者回滾,在其他會話中任何對該表的DML都會被阻塞(不會報錯),但對該表的查詢可以正常執(zhí)行。\x0d\x0a6、 在歸檔模式下,要把表設(shè)置為nologging,然后以append方式批量添加記錄,才會顯著減少redo數(shù)量。在非歸檔模式下,不必設(shè)置表的 nologging屬性,即可減少redo數(shù)量。如果表上有索引,則append方式批量添加記錄,不會減少索引上產(chǎn)生的redo數(shù)量,索引上的redo 數(shù)量可能比表的redo數(shù)量還要大。\x0d\x0a7、 數(shù)據(jù)直接插入數(shù)據(jù)文件,繞過buffer cache并且忽略了引用完整性約束。\x0d\x0a8、 不管表是否在nologging 下,只要是 direct insert,就不會對數(shù)據(jù)內(nèi)容生成undo。\x0d\x0a9、 Oracle在Direct-Path INSERT 操作末尾,對具有索引的表執(zhí)行索引維護,這樣就避免了在drop掉索引后,再rebuild。\x0d\x0a10、 Direct-Path INSERT比常規(guī)的插入需要更多的空間。因為它將數(shù)據(jù)插入在高水位之上。并行插入非分區(qū)表需要更多的空間,因為它需要為每一個并行線程創(chuàng)建臨時段。\x0d\x0a11、 在插入期間,數(shù)據(jù)庫在表上獲得排他鎖,用戶不能在表上執(zhí)行并行插入、更新或者刪除操作,并行的索引創(chuàng)建和build也不被允許。但卻可以并行查詢,但查詢返回的是插入之前的結(jié)果集。\x0d\x0a (5)、并行DML:\x0d\x0a 如果你的服務(wù)器有多個cpu,采用parellel hint,可以大幅度的提高效率\x0d\x0a ALTER SESSION ENABLE PARALLEL DML;\x0d\x0a\x0d\x0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA \x0d\x0a SELECT * FROM tableB;\x0d\x0a\x0d\x0a 為了提高速度可以使用下面方法,來減少插入過程中產(chǎn)生的日志:\x0d\x0a\x0d\x0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA NOLOGGING\x0d\x0a SELECT * FROM tableB;\x0d\x0a\x0d\x0aoracle默認并不會打開PDML,對DML語句必須手工啟用。即需要執(zhí)行\(zhòng)x0d\x0aalter table enable parallel dml命令。\x0d\x0a \x0d\x0a并行DML特點:\x0d\x0a1、在并行DML模式中,默認的就是DIRECT-PATH插入,為了運行并行DML模式,必須滿足以下條件:\x0d\x0aa、必須是Oracle企業(yè)版;\x0d\x0ab、必須在session中使并行DML生效,執(zhí)行以下sql語句:\x0d\x0aALTER SESSION { ENABLE | FORCE } PARALLEL DML;\x0d\x0ac、必須指定table的并行屬性,在創(chuàng)建的時候或者其他時候,或者在insert操作時使用“PARALLEL”提示。\x0d\x0ad、為了使Direct-Path Insert模式失效,在INSERT語句中指定“NOAPPEND”提示,覆蓋并行DML模式。\x0d\x0a 2、并行Direct-Path INSERT到分區(qū)表:\x0d\x0a 類似于serial Direct-Path INSERT,每個并行操作分配給一個或者多個分區(qū),每個并行操作插入數(shù)據(jù)到各自的分區(qū)段的高水位標志之上,commit之后,用戶就能看到更新的數(shù)據(jù)。\x0d\x0a 3、并行Direct-Path INSERT到非分區(qū)表:\x0d\x0a 每個并行執(zhí)行分配一個新的臨時段,并插入數(shù)據(jù)到臨時段。當(dāng)commit運行后,并行執(zhí)行協(xié)調(diào)者合并新的臨時段到主表段,用戶就能看到更新的數(shù)據(jù)。\x0d\x0a 4、Direct-Path INSERT可以使用Log或者不使用Log。\x0d\x0a 5、另外不得不說的是,并行不是一個可擴展的特性,只有在數(shù)據(jù)倉庫或作為DBA等少數(shù)人的工具在批量數(shù)據(jù)操作時利于充分利用資源,而在OLTP環(huán)境下使用并行需要非常謹慎。事實上PDML還是有比較多的限制的,例如不支持觸發(fā)器,引用約束,高級復(fù)制和分布式事務(wù)等特性,同時也會帶來額外的空間占用,PDDL同 樣是如此。

Oracle如何維護索引

對三個字段建立索引:

create index Stuname on student(name);

create index Stusex on student(sex);

create index Stugrade on student(grade);

注意的問題,考慮是不是要建立唯一索引(unique),如果有學(xué)號的話,可以考慮建立唯一索引引。

再就是對經(jīng)常查詢,但又相對穩(wěn)定的可以建立聚簇索引,提高查詢效率

在Oracle中,索引有什么優(yōu)點和缺點?

一:索引是什么:

通俗的來講,索引在表中的作用,相當(dāng)于書的目錄對書的作用。索引與表一樣,也屬于段的一種。里面存放了用戶的數(shù)據(jù),跟表一樣需要占用磁盤空間。索引是一種允許直接訪問數(shù)據(jù)表中某一數(shù)據(jù)行的樹型結(jié)構(gòu),為了提高查詢效率而引入,是一個獨立于表的對象,可以存放在與表不同的表空間中。索引記錄中存有索引關(guān)鍵字和指向表中數(shù)據(jù)的指針(地址)。對索引進行的I/O操作比對表進行操作要少很多。索引一旦被建立就將被Oracle系統(tǒng)自動維護,查詢語句中不用指定使用哪個索引。

二:優(yōu)點:

①可以加快數(shù)據(jù)的檢索速度。

②可以加速表和表之間的連接。

③使用分組和排序子句進行數(shù)據(jù)檢索時,可以減少查詢中分組和排序的時間。

三:缺點:

①創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加。

②索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間。

③當(dāng)對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引需要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度。

網(wǎng)站題目:包含oracle索引如何維護的詞條
網(wǎng)址分享:http://vcdvsql.cn/article28/heoicp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、定制開發(fā)、App開發(fā)、靜態(tài)網(wǎng)站、云服務(wù)器、網(wǎng)站建設(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)

網(wǎng)站優(yōu)化排名