宝贝腿开大点我添添你视频男男,中文字幕熟女人妻av一区二区三区,爱色成人网,大地资源高清播放在线观看在线电影在线观看 ,777米奇影视第四色

集團(tuán)站切換校區(qū)

驗(yàn)證碼已發(fā)送,請(qǐng)查收短信

復(fù)制成功
微信號(hào):togogoi
添加微信好友, 詳細(xì)了解課程
已復(fù)制成功,如果自動(dòng)跳轉(zhuǎn)微信失敗,請(qǐng)前往微信添加好友
打開(kāi)微信
圖標(biāo)

業(yè)界新聞

當(dāng)前位置:首頁(yè) > >業(yè)界新聞 > >

Oracle提高SQL執(zhí)行效率的三種方法

發(fā)布時(shí)間: 2020-08-27 10:16:13

要提高SQL在Oracle里的執(zhí)行效率,優(yōu)化應(yīng)用的業(yè)務(wù)邏輯是最主要的,從技術(shù)層面來(lái)講Oracle也提供了一些方法,今天主要講3種:

Oracle提供了多種方法用于減少花在剖析OracleSQL表達(dá)式上的時(shí)間,在執(zhí)行帶有大量執(zhí)行計(jì)劃的復(fù)雜查詢時(shí)剖析過(guò)程會(huì)拖累系統(tǒng)的性能?,F(xiàn)在我們來(lái)簡(jiǎn)要地看看這些方法中的幾種。

1、使用ordered提示

Oracle必須花費(fèi)大量的時(shí)間來(lái)剖析多表的合并,用以確定表合并的最佳順序。如果SQL表達(dá)式涉及七個(gè)乃至更多的表合并,那么有時(shí)就會(huì)需要超過(guò)30分

鐘的時(shí)間來(lái)剖析,因?yàn)?/span>Oracle必須評(píng)估表合并所有可能的順序。八個(gè)表就會(huì)有40,000多種順序。Ordered這個(gè)提示(hint)和其他的提示一起使用能夠產(chǎn)生合適的合并順序。

Ordered這個(gè)提示會(huì)要求列在SQL表達(dá)式FROM字句里的表按照指定的順序進(jìn)行合并,F(xiàn)ROM字句里的第一個(gè)表會(huì)指定驅(qū)動(dòng)表格(drivingtable)。驅(qū)動(dòng)表格應(yīng)該是返回最小行數(shù)的表格。使用ordered提示會(huì)跳過(guò)非常耗時(shí)和耗資源的剖析操作,并加快Oracle SQL的執(zhí)行。

Listing A如下:

以下是引用片段:

Listing A

select e.ename, hiredate, b.comm

from emp e,bonus b

where e.ename = b.ename ;

ListingA里是一個(gè)復(fù)雜查詢的例子,這個(gè)查詢被強(qiáng)制進(jìn)行一個(gè)嵌套循環(huán),從而與對(duì)emp表格進(jìn)行的并行查詢合并。要注意,我已經(jīng)使用ordered提示來(lái)引導(dǎo)Oracle去按照FROM子句所列出的順序來(lái)評(píng)估表格。

2、使用ordered_predicates

ordered_predicates提示在查詢的WHERE子句里指定的,并被用來(lái)指定布爾判斷(Booleanpredicate)被評(píng)估的順序。在沒(méi)有ordered_predicates的情況下,Oracle會(huì)使用下面這些步驟來(lái)評(píng)估SQL判斷的順序:

子查詢的評(píng)估先于外層WHERE子句里的Boolean條件。

所有沒(méi)有內(nèi)置函數(shù)或者子查詢的布爾條件都按照其在WHERE子句里相反的順序進(jìn)行評(píng)估,即最后一條判斷最先被評(píng)估。

每個(gè)判斷都帶有內(nèi)置函數(shù)的布爾判斷都依據(jù)其預(yù)計(jì)的評(píng)估值按遞增排列。你可以使用ordered_predicates提示來(lái)強(qiáng)制取代這些缺省的評(píng)估規(guī)則,那么你WHERE子句里的項(xiàng)目就會(huì)按照其在查詢里出現(xiàn)的順序被評(píng)估。在查詢的WHERE子句里使用了PL/SQL函數(shù)的情況下,通常會(huì)使用ordered_predicates提示。如果你知道限制最多的判斷并且希望Oracle最先評(píng)估這些判斷的時(shí)候,在這種情況下,它也是非常有用的。用法提示:你不能使用ordered_predicates提示來(lái)保存對(duì)索引鍵進(jìn)行判斷評(píng)估的順序。

create table t1(v1,n1,n2) as select to_char(mod

(rownum,20)),rownum,mod(rownum,20) from all_objects where

rownum<=3000;

SQL> execute dbms_stats.gather_tabLE_stats('HR','T1');

SQL> select

2 v1,n2,n1

3 from t1

4 where v1=1

5 and n2=18

6 and n1=998

7 ;no rows selected

Execution Plan

----------------------------------------------------------

Plan hash value: 3617692013

------------------------------------------------------------------

--------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

-----------------------------------------------------------------

--------

| 0 | SELECT STATEMENT | | 1 | 10 | 4 (0)| 00:00:01 |

|* 1 | TABLE ACCESS FULL| T1 | 1 | 10 | 4 (0)| 00:00:01 |

------------------------------------------------------------------

--------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter("N1"=998 AND "N2"=18 AND TO_NUMBER("V1")=1)

SQL> select

2 v1,n2,n1

3 from t1

4 where v1=1

5 and n2=18

6 and n1=998

7 ;no rows selected

Execution Plan

----------------------------------------------------------

Plan hash value: 3617692013

------------------------------------------------------------------

--------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

------------------------------------------------------------------

--------

| 0 | SELECT STATEMENT | | 1 | 48 | 4 (0)| 00:00:01 |

|* 1 | TABLE ACCESS FULL| T1 | 1 | 48 | 4 (0)| 00:00:01 |

------------------------------------------------------------------

--------

Predicate Information (identified by operation id):

---------------------------------------------------

1 - filter(TO_NUMBER("V1")=1 AND "N2"=18 AND "N1"=998)

3、限制表格合并評(píng)估的數(shù)量

提高SQL剖析性能的最后一種方法是強(qiáng)制取代Oracle的一個(gè)參數(shù),這個(gè)參數(shù)控制著在評(píng)估一個(gè)查詢的時(shí)候,基于消耗的優(yōu)化器所評(píng)估的可能合并數(shù)量。

_optimizer_search_limit這個(gè)參數(shù)會(huì)指定表格合并組合的較大數(shù)量,后者將會(huì)在Oracle試圖確定合并多表格最佳方式的時(shí)候被評(píng)估。這個(gè)參數(shù)有助于防止優(yōu)化器花更多的時(shí)間來(lái)評(píng)估可能的合并順序,而不是把時(shí)間花在尋找最佳合并順序上。_optimizer_search_limit還控制著用于調(diào)用starjoin提示的闕值,當(dāng)查詢里的表格數(shù)量低于_optimizer_search_limit(其缺省的值是5)的時(shí)候,star提示就會(huì)被光顧。

以上只是一些Oracle DBA用來(lái)優(yōu)化Oracle數(shù)據(jù)庫(kù)應(yīng)用程序SQL查詢的性能的一些小技巧。

上一篇: 華為HCIE網(wǎng)絡(luò)工程師技術(shù)細(xì)節(jié)詳解——什么是PPP MP接口?

下一篇: 怎么選擇紅帽rhce培訓(xùn)機(jī)構(gòu)?

在線咨詢 ×

您好,請(qǐng)問(wèn)有什么可以幫您?我們將竭誠(chéng)提供最優(yōu)質(zhì)服務(wù)!