-
當前位置:首頁 > 創(chuàng)意學院 > 技術 > 專題列表 > 正文
提高oracle查詢速度(oracle提高查詢效率)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關于提高oracle查詢速度的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關鍵詞,就能返回你想要的內容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、如何加速Oracle大批量數(shù)據(jù)處理?
一、 提高DML操作的辦法:x0dx0a簡單說來:x0dx0a1、暫停索引,更新后恢復.避免在更新的過程中涉及到索引的重建.x0dx0a2、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.x0dx0a3、創(chuàng)建一臨時的大的表空間用來應對這些更新動作.x0dx0ax0dx0a4、批量更新,每更新一些記錄后及時進行提交動作.避免大量占用回滾段和或臨時表空間.x0dx0ax0dx0a5、創(chuàng)建一臨時的大的表空間用來應對這些更新動作.x0dx0ax0dx0a6、加大排序緩沖區(qū)x0dx0a alter session set sort_area_size=100000000;x0dx0a insert into tableb select * from tablea;x0dx0a commit;x0dx0ax0dx0a如果UPDATE的是索引字段,就會涉及到索引的重建,暫停索引不會提高多少的速度,反而有可能降低UPDATE速度,x0dx0a因為在更新是索引可以提高數(shù)據(jù)的查詢速度,重建索引引起的速度降低影響不大。x0dx0ax0dx0aORACLE優(yōu)化修改參數(shù)最多也只能把性能提高15%,大部分都是SQL語句的優(yōu)化!x0dx0ax0dx0aupdate總體來說比insert要慢 :x0dx0a幾點建議: x0dx0a 1、如果更新的數(shù)據(jù)量接近整個表,就不應該使用index而應該采用全表掃描 x0dx0a 2、減少不必要的index,因為update表通常需要update index x0dx0a 3、如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率x0dx0a 另外,建表的參數(shù)非常重要,對于更新非常頻繁的表,建議加大PCTFREE的值,以保證數(shù)據(jù)塊中有足夠的空間用于UPDATE, 從而降低CHAINED_ROWS。 x0dx0ax0dx0a二、 各種批量DML操作:x0dx0a(1)、oracle批量拷貝:x0dx0aset arraysize 20x0dx0a set copycommit 5000x0dx0a copy from username/password@oraclename append table_name1x0dx0a using select * from table_name2;x0dx0a (2)、常規(guī)插入方式:x0dx0a insert into t1 select * from t;x0dx0a 為了提高速度可以使用下面方法,來減少插入過程中產生的日志:x0dx0a alter table t1 nologging;x0dx0ainsert into t1 select * from t;x0dx0acommit;x0dx0a (3)、CTAS方式:x0dx0a create table t1x0dx0aasx0dx0aselect * from t;x0dx0a為了提高速度可以使用下面方法,來減少插入過程中產生的日志,并且可以制定并行度:x0dx0acreate table t1 nologging parallel(degree 2) as select * from t;x0dx0a (4)、Direct-Path插入:x0dx0a insert /*+append*/ into t1 select * from t;x0dx0a commit;x0dx0a 為了提高速度可以使用下面方法,來減少插入過程中產生的日志:x0dx0a alter table t1 nologging;x0dx0a insert /*+append*/ into t1 select * from t;x0dx0a x0dx0a Direct-Path插入特點:x0dx0a1、 append只在insert ? select ?中起作用,像insert /*+ append */ into t values(?)這類的語句是不起作用的。在update、delete操作中,append也不起作用。x0dx0a2、 Direct-Path會使數(shù)據(jù)庫不記錄直接路徑導入的數(shù)據(jù)的重做日志,會對恢復帶來麻煩。x0dx0a3、 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)勢會更加明顯。x0dx0a4、 以append方式插入記錄后,要執(zhí)行commit,才能對表進行查詢。否則會出現(xiàn)錯誤:ORA-12838: 無法在并行模式下修改之后讀/修改對象。x0dx0a5、 用append導入數(shù)據(jù)后,如果沒有提交或者回滾,在其他會話中任何對該表的DML都會被阻塞(不會報錯),但對該表的查詢可以正常執(zhí)行。x0dx0a6、 在歸檔模式下,要把表設置為nologging,然后以append方式批量添加記錄,才會顯著減少redo數(shù)量。在非歸檔模式下,不必設置表的 nologging屬性,即可減少redo數(shù)量。如果表上有索引,則append方式批量添加記錄,不會減少索引上產生的redo數(shù)量,索引上的redo 數(shù)量可能比表的redo數(shù)量還要大。x0dx0a7、 數(shù)據(jù)直接插入數(shù)據(jù)文件,繞過buffer cache并且忽略了引用完整性約束。x0dx0a8、 不管表是否在nologging 下,只要是 direct insert,就不會對數(shù)據(jù)內容生成undo。x0dx0a9、 Oracle在Direct-Path INSERT 操作末尾,對具有索引的表執(zhí)行索引維護,這樣就避免了在drop掉索引后,再rebuild。x0dx0a10、 Direct-Path INSERT比常規(guī)的插入需要更多的空間。因為它將數(shù)據(jù)插入在高水位之上。并行插入非分區(qū)表需要更多的空間,因為它需要為每一個并行線程創(chuàng)建臨時段。x0dx0a11、 在插入期間,數(shù)據(jù)庫在表上獲得排他鎖,用戶不能在表上執(zhí)行并行插入、更新或者刪除操作,并行的索引創(chuàng)建和build也不被允許。但卻可以并行查詢,但查詢返回的是插入之前的結果集。x0dx0a (5)、并行DML:x0dx0a 如果你的服務器有多個cpu,采用parellel hint,可以大幅度的提高效率x0dx0a ALTER SESSION ENABLE PARALLEL DML;x0dx0ax0dx0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA x0dx0a SELECT * FROM tableB;x0dx0ax0dx0a 為了提高速度可以使用下面方法,來減少插入過程中產生的日志:x0dx0ax0dx0a INSERT /*+ PARALLEL(tableA, 2) */INTO tableA NOLOGGINGx0dx0a SELECT * FROM tableB;x0dx0ax0dx0aoracle默認并不會打開PDML,對DML語句必須手工啟用。即需要執(zhí)行x0dx0aalter table enable parallel dml命令。x0dx0a x0dx0a并行DML特點:x0dx0a1、在并行DML模式中,默認的就是DIRECT-PATH插入,為了運行并行DML模式,必須滿足以下條件:x0dx0aa、必須是Oracle企業(yè)版;x0dx0ab、必須在session中使并行DML生效,執(zhí)行以下sql語句:x0dx0aALTER SESSION { ENABLE | FORCE } PARALLEL DML;x0dx0ac、必須指定table的并行屬性,在創(chuàng)建的時候或者其他時候,或者在insert操作時使用“PARALLEL”提示。x0dx0ad、為了使Direct-Path Insert模式失效,在INSERT語句中指定“NOAPPEND”提示,覆蓋并行DML模式。x0dx0a 2、并行Direct-Path INSERT到分區(qū)表:x0dx0a 類似于serial Direct-Path INSERT,每個并行操作分配給一個或者多個分區(qū),每個并行操作插入數(shù)據(jù)到各自的分區(qū)段的高水位標志之上,commit之后,用戶就能看到更新的數(shù)據(jù)。x0dx0a 3、并行Direct-Path INSERT到非分區(qū)表:x0dx0a 每個并行執(zhí)行分配一個新的臨時段,并插入數(shù)據(jù)到臨時段。當commit運行后,并行執(zhí)行協(xié)調者合并新的臨時段到主表段,用戶就能看到更新的數(shù)據(jù)。x0dx0a 4、Direct-Path INSERT可以使用Log或者不使用Log。x0dx0a 5、另外不得不說的是,并行不是一個可擴展的特性,只有在數(shù)據(jù)倉庫或作為DBA等少數(shù)人的工具在批量數(shù)據(jù)操作時利于充分利用資源,而在OLTP環(huán)境下使用并行需要非常謹慎。事實上PDML還是有比較多的限制的,例如不支持觸發(fā)器,引用約束,高級復制和分布式事務等特性,同時也會帶來額外的空間占用,PDDL同 樣是如此。
二、如何提升oracle大表查詢的效率啊?
1、建索引。
2、減少表之間的關聯(lián);
3、優(yōu)化sql
,盡量讓SQL很快的定位,不要走全表查詢,盡量走索引
4、簡化查詢的字段。
希望對你有用。
三、增加索引能提高oracle查詢速度嗎
這句話不嚴謹,在針對百萬條以上的數(shù)據(jù)添加索引會加快查詢速度,但如果是較少的數(shù)據(jù),加索引反而會降低查詢速度。至于update跟索引無關。
四、oracle 數(shù)據(jù)庫表數(shù)據(jù)量比較大,如何提升查詢速度?
數(shù)據(jù)表百萬級的數(shù)據(jù)量,其實還是不是很大的,建立合理的索引就可以解決了。建立分區(qū)表的話,是可以根據(jù)所分區(qū)的內容進行查詢的,比如單獨查詢2011年度的記錄,但是因為你已經有了一定的歷史數(shù)據(jù),所以相對比較麻煩,建議百度一下。另外也可以將數(shù)據(jù)導出,然后重新建立需要分區(qū)的表,在建表的同時進行分區(qū),這樣再單獨把數(shù)據(jù)導入就自動分區(qū)了
以上就是關于提高oracle查詢速度相關問題的回答。希望能幫到你,如有更多相關問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內容。
推薦閱讀:
抖音如何提高互動指數(shù)(抖音互動指數(shù)低怎么解決)