oracle 如何優化乙個語句

2022-09-07 03:24:13 字數 2020 閱讀 6470

這是個終極問題,因為優化本身的複雜性實在是難以總結的,很多時候優化的方法並不是用到了什麼高深莫測的技術,而只是乙個思想意識層面的差異,而這些都很可能連帶導致效能表現上的巨大差異。

所以有時候我們應該先搞清楚需求到底是什麼,sql本身是否合理,這些思考很可能會使優化工作事半功倍。而本文是假設sql本身合理,從oracle提供給我們的一些技術手段來簡單介紹下oracle資料庫,該如何使用一些現有的技術來優化乙個sql執行的效能。

確定需要優化的sql文字及當前sql執行計畫

確定sql涉及的所有表及其索引的相關資訊

執行sql tuning advisor 得到調整建議供優化參考

收集表資訊

收集索引資訊

sql profile

物化檢視

執行sql tuning advisor 得到調整建議供優化參考, sql tuning advisor得到的優化建議僅供參考,具體如何做還需要結合業務實際情況。

例如收集zjy使用者下t2表的統計資訊。(t2是range分割槽表,按天分割槽,每天資料量大概80w,存放半年)

sql> execute dbms_stats.gather_table_stats(ownname => 'zjy', tabname => 't2', estimate_percent => dbms_stats.auto_sample_size, method_opt => 'for all columns size auto', cascade => true, degree => 16);

pl/sql procedure

successfully

completed

executed

in 5896.641 seconds

統計資訊加鎖/解鎖

--鎖住表的統計資訊

exec dbms_stats.lock_table_stats('zjy','t2');

--解鎖表的統計資訊

exec dbms_stats.unlock_table_stats('zjy','t2');

例如只收集zjy使用者下t2表的索引idx_t2_1統計資訊。(idx_t2_1是分割槽索引,包含4個字段)

sql> execute dbms_stats.gather_index_stats(ownname => 'zjy', indname => 'idx_t2_1', estimate_percent => dbms_stats.auto_sample_size, degree => 8);

pl/sql procedure

successfully

completed

executed

in 44.312 seconds

create

index idx_t2_2 on t2(start_time) tablespace dbs_i_jingyu nologging parallel

12online;

alter

index idx_t2_2 noparallel;

alter

index idx_t2_2 logging;

sql profile是10g中的新特性,作為自動sql調整過程的一部分。sql profile是乙個物件,它包含了可以幫助查詢優化器為乙個特定的sql語句找到高效執行計畫的資訊。這些資訊包括執行環境、物件統計和對查詢優化器所做評估的修正資訊。它的最大優點之一就是在不修改sql語句和會話執行環境的情況下影響查詢優化器的決定。sql profile中包含的並非單個執行計畫的資訊,sql profile不會固定乙個sql語句的執行計畫。當表的資料增長或者索引建立、刪除,使用同乙個sql profile的執行計畫可能會改變,而儲存在sql

profile中的資訊會繼續起作用。所以,經過一段很長的時間之後,它的資訊有可能會過時,需要重新生成。

oracle的物化檢視可以用於預先計算並儲存(表連線或聚集等耗時較多的操作的)結果,所以合理使用物化檢視,會在執行查詢時避免進行這些耗時的操作,從而快速的得到結果。

oracle 如何優化乙個語句

這是個終極問題,因為優化本身的複雜性實在是難以總結的,很多時候優化的方法並不是用到了什麼高深莫測的技術,而只是乙個思想意識層面的差異,而這些都很可能連帶導致效能表現上的巨大差異。所以有時候我們應該先搞清楚需求到底是什麼,sql本身是否合理,這些思考很可能會使優化工作事半功倍。而本文是假設sql本身合...

Oracle語句優化 個規則詳解

1.選用適合的oracle優化器 2.訪問table的方式oracle 採用兩種訪問表中記錄的方式 3.共享sql語句 4.選擇最有效率的表名順序 只在基於規則的優化器中有效 5.where子句中的連線順序。6.select子句中避免使用 7.減少訪問資料庫的次數 8.使用decode函式來減少處理...

如何優化乙個氣泡排序

氣泡排序應該是很多人第乙個接觸的排序,比較簡單,不展開講解了 function bubblesort arr return arr 複製 氣泡排序總會執行 n 1 n 2 n 3 2 1趟,但如果執行到當中某一趟時排序已經完成,或者輸入的是乙個有序陣列,那麼後邊的比較就都是多餘的,為了避免這種情況,...