最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Oracle 12CR2查詢(xún)轉(zhuǎn)換教程之cursor-duration臨時(shí)表詳解

 更新時(shí)間:2018年11月01日 10:08:05   作者:jydba  
這篇文章主要給大家介紹了關(guān)于Oracle 12CR2查詢(xún)轉(zhuǎn)換教程之cursor-duration臨時(shí)表的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

在Oracle12C中為了物化查詢(xún)的中間結(jié)果,Oracle數(shù)據(jù)庫(kù)在查詢(xún)編譯時(shí)在內(nèi)存中可能會(huì)隱式的創(chuàng)建一個(gè)cursor_duration臨時(shí)表。

下面話(huà)不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

Cursor-Duration臨時(shí)表的作用

復(fù)雜查詢(xún)有時(shí)會(huì)處理相同查詢(xún)塊多次,這將會(huì)增加不必要的性能開(kāi)鎖。為了避免這種問(wèn)題,Oracle數(shù)據(jù)庫(kù)可以在游標(biāo)生命周期內(nèi)為查詢(xún)結(jié)果創(chuàng)建臨時(shí)表并存儲(chǔ)在內(nèi)存中。對(duì)于有with子句查詢(xún),星型轉(zhuǎn)換與分組集合操作的復(fù)雜操作,這種優(yōu)化增強(qiáng)了使用物化中間結(jié)果來(lái)優(yōu)化子查詢(xún)。在這種方式下,cursor-duration臨時(shí)表提高了性能并且優(yōu)化了I/O。

Cursor-Duration臨時(shí)表工作原理

cursor-definition臨時(shí)表定義內(nèi)置在內(nèi)存中。表定義與游標(biāo)相關(guān),并且只對(duì)執(zhí)行游標(biāo)的會(huì)話(huà)可見(jiàn)。當(dāng)使用cursor-duration臨時(shí)表時(shí),數(shù)據(jù)庫(kù)將執(zhí)行以下操作:

1.選擇使用cursor-duration臨時(shí)表的執(zhí)行計(jì)劃

2.創(chuàng)建臨時(shí)表時(shí)使用唯一名

3.重寫(xiě)查詢(xún)引用臨時(shí)表

4.加載數(shù)據(jù)到內(nèi)存中直到?jīng)]有內(nèi)存可用,在這種情次品下將在磁盤(pán)上創(chuàng)建臨時(shí)段

5.執(zhí)行查詢(xún),從臨時(shí)表中返回?cái)?shù)據(jù)

6.truncate表,釋放內(nèi)存與任何磁盤(pán)上的臨時(shí)段

注意,cursor-duration臨時(shí)表的元數(shù)據(jù)只要cursor在內(nèi)存中就會(huì)一直存在于內(nèi)存中。元數(shù)據(jù)不會(huì)存儲(chǔ)在數(shù)據(jù)字典中這意味著通過(guò)數(shù)據(jù)字典視圖將不能查詢(xún)到,不能顯性地刪除元數(shù)據(jù)。上面的場(chǎng)景依賴(lài)于可用的內(nèi)存。對(duì)于特定查詢(xún),臨時(shí)表使用PGA內(nèi)存。

cursor-duration臨時(shí)表的實(shí)現(xiàn)類(lèi)似于排序。如果沒(méi)有可用內(nèi)存,那么數(shù)據(jù)庫(kù)將把數(shù)據(jù)寫(xiě)入臨時(shí)段。對(duì)于cursor-duration臨時(shí)表,主要差異如下:

.在查詢(xún)結(jié)束時(shí)數(shù)據(jù)庫(kù)釋放內(nèi)存與臨時(shí)段而不是當(dāng)row source不現(xiàn)活動(dòng)時(shí)釋放。

.內(nèi)存中的數(shù)據(jù)仍然存儲(chǔ)在內(nèi)存中,不像排序數(shù)據(jù)可能在內(nèi)存與臨時(shí)段之間移動(dòng)。

當(dāng)數(shù)據(jù)庫(kù)使用cursor-duration臨時(shí)表時(shí),關(guān)鍵字cursor duration memory會(huì)出現(xiàn)在執(zhí)行計(jì)劃中。

cursor-duration臨時(shí)表使用場(chǎng)景

一個(gè)with查詢(xún)重復(fù)相同子查詢(xún)多次可能有時(shí)使用cursor-duration臨時(shí)表性能更高,下面的查詢(xún)使用一個(gè)with子句來(lái)創(chuàng)建三個(gè)子查詢(xún)塊:

SQL> set long 99999
SQL> set linesize 300
SQL> with
 2 q1 as (select department_id, sum(salary) sum_sal from hr.employees group by
 3 department_id),
 4 q2 as (select * from q1),
 5 q3 as (select department_id, sum_sal from q1)
 6 select * from q1
 7 union all
 8 select * from q2
 9 union all
 10 select * from q3;

DEPARTMENT_ID SUM_SAL
------------- ----------
   100  51608
   30  24900
     7000
   90  58000
   20  19000
   70  10000
   110  20308
   50  156400
   80  304500
   40  6500
   60  28800
   10  4400
   100  51608
   30  24900
     7000
   90  58000
   20  19000
   70  10000
   110  20308
   50  156400
   80  304500
   40  6500
   60  28800
   10  4400
   100  51608
   30  24900
     7000
   90  58000
   20  19000
   70  10000
   110  20308
   50  156400
   80  304500
   40  6500
   60  28800
   10  4400

36 rows selected.

下面是優(yōu)化轉(zhuǎn)換后的執(zhí)行計(jì)劃

SQL> select * from table(dbms_xplan.display_cursor(format=>'basic +rows +cost'));

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
EXPLAINED SQL STATEMENT:
------------------------
with q1 as (select department_id, sum(salary) sum_sal from hr.employees
group by department_id), q2 as (select * from q1), q3 as (select
department_id, sum_sal from q1) select * from q1 union all select *
from q2 union all select * from q3

Plan hash value: 4087957524

----------------------------------------------------------------------------------------------------
| Id | Operation        | Name      | Rows | Cost (%CPU)|

PLAN_TABLE_OUTPUT
----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT       |       |  |  6 (100)|
| 1 | TEMP TABLE TRANSFORMATION    |       |  |   |
| 2 | LOAD AS SELECT (CURSOR DURATION MEMORY)| SYS_TEMP_0FD9E08D2_620789C |  |   |
| 3 | HASH GROUP BY       |       | 11 | 276 (2)|
| 4 |  TABLE ACCESS FULL     | EMPLOYEES     | 100K| 273 (1)|
| 5 | UNION-ALL        |       |  |   |
| 6 | VIEW         |       | 11 |  2 (0)|
| 7 |  TABLE ACCESS FULL     | SYS_TEMP_0FD9E08D2_620789C | 11 |  2 (0)|
| 8 | VIEW         |       | 11 |  2 (0)|
| 9 |  TABLE ACCESS FULL     | SYS_TEMP_0FD9E08D2_620789C | 11 |  2 (0)|
| 10 | VIEW         |       | 11 |  2 (0)|
| 11 |  TABLE ACCESS FULL     | SYS_TEMP_0FD9E08D2_620789C | 11 |  2 (0)|
----------------------------------------------------------------------------------------------------


26 rows selected.

在上面的執(zhí)行計(jì)劃中,在步驟1中的TEMP TABLE TRANSFORMATION指示數(shù)據(jù)庫(kù)使用cursor-duration臨時(shí)表來(lái)執(zhí)行查詢(xún)。在步驟2中的CURSOR DURATION MEMORY指示數(shù)據(jù)庫(kù)使用內(nèi)存,如果有可用內(nèi)存,將結(jié)果作為臨時(shí)表SYS_TEMP_0FD9E08D2_620789C來(lái)進(jìn)行存儲(chǔ)。如果沒(méi)有可用內(nèi)存,那么數(shù)據(jù)庫(kù)將臨時(shí)數(shù)據(jù)寫(xiě)入磁盤(pán)。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Oracle遞歸查詢(xún)connect?by用法

    Oracle遞歸查詢(xún)connect?by用法

    本文詳細(xì)講解了Oracle遞歸查詢(xún)connect?by的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Oracle數(shù)據(jù)庫(kù)系統(tǒng)使用經(jīng)驗(yàn)六則

    Oracle數(shù)據(jù)庫(kù)系統(tǒng)使用經(jīng)驗(yàn)六則

    Oracle數(shù)據(jù)庫(kù)系統(tǒng)使用經(jīng)驗(yàn)六則...
    2007-03-03
  • plsql配置tnsnames.ora的實(shí)現(xiàn)方法

    plsql配置tnsnames.ora的實(shí)現(xiàn)方法

    這篇文章主要介紹了plsql配置tnsnames.ora的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Oracle中如何創(chuàng)建用戶(hù)、表(1)

    Oracle中如何創(chuàng)建用戶(hù)、表(1)

    這篇文章主要介紹了Oracle中如何創(chuàng)建用戶(hù)、表(1)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • oracle適配器連接不上的解決辦法

    oracle適配器連接不上的解決辦法

    racle 的Developer連接不上報(bào)錯(cuò):listener does not currently know of SID given in connect descriptor,如何解決呢?下面小編給大家分享oracle適配器連接不上的解決辦法,需要的朋友可以參考下
    2015-10-10
  • Oracle數(shù)據(jù)創(chuàng)建虛擬列和復(fù)合觸發(fā)器的方法

    Oracle數(shù)據(jù)創(chuàng)建虛擬列和復(fù)合觸發(fā)器的方法

    Oracle的虛擬列解決了很多需要使用觸發(fā)器或者需要通過(guò)代碼進(jìn)行計(jì)算統(tǒng)計(jì)產(chǎn)生數(shù)據(jù)信息的問(wèn)題,而復(fù)合觸發(fā)器實(shí)際上是作為一個(gè)整體定義的四個(gè)不同的觸發(fā)器來(lái)執(zhí)行操作,需要了解的朋友可以參考下
    2015-08-08
  • Oracle Session每日統(tǒng)計(jì)功能實(shí)現(xiàn)

    Oracle Session每日統(tǒng)計(jì)功能實(shí)現(xiàn)

    客戶(hù)最近有這樣的需求,想通過(guò)統(tǒng)計(jì)Oracle數(shù)據(jù)庫(kù)活躍會(huì)話(huà)數(shù),并記錄在案,利用比對(duì)歷史的活躍會(huì)話(huà)的方式,實(shí)現(xiàn)對(duì)系統(tǒng)整體用戶(hù)并發(fā)量有大概的預(yù)估,本文給大家分享具體實(shí)現(xiàn)方法,感興趣的朋友一起看看吧
    2022-02-02
  • Oracle + mybatis實(shí)現(xiàn)對(duì)數(shù)據(jù)的簡(jiǎn)單增刪改查實(shí)例代碼

    Oracle + mybatis實(shí)現(xiàn)對(duì)數(shù)據(jù)的簡(jiǎn)單增刪改查實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于利用Oracle + mybatis如何實(shí)現(xiàn)對(duì)數(shù)據(jù)的簡(jiǎn)單增刪改查的相關(guān)資料,文中圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • oracle數(shù)據(jù)與文本導(dǎo)入導(dǎo)出源碼示例

    oracle數(shù)據(jù)與文本導(dǎo)入導(dǎo)出源碼示例

    這篇文章主要介紹了oracle數(shù)據(jù)與文本導(dǎo)入導(dǎo)出源碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • oracle用什么SQL語(yǔ)句判斷表存不存在

    oracle用什么SQL語(yǔ)句判斷表存不存在

    oracle用什么SQL語(yǔ)句判斷表存不存在...
    2007-03-03

最新評(píng)論

乐业县| 耒阳市| 凤山县| 财经| 和田市| 中西区| 涟水县| 开鲁县| 吴旗县| 龙陵县| 黄陵县| 全南县| 高邮市| 沧州市| 雅江县| 黎平县| 蒲江县| 绍兴市| 闽侯县| 乌审旗| 临颍县| 海安县| 蓬莱市| 额济纳旗| 安溪县| 富阳市| 南漳县| 苏州市| 三门峡市| 鄂托克前旗| 敦煌市| 曲阜市| 清原| 赣榆县| 阆中市| 民勤县| 江陵县| 曲周县| 南陵县| 吉林市| 长海县|