国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Oracle中connect by語句的優化

數據庫 Oracle
很多應用中都會有類似組織機構的表,組織機構的表又通常是典型的層次結構(沒有循環節點)。于是通過組織控制數據權限的時候,許多人都喜歡通過connect by獲得組織信息,然后再過濾目標數據。

[[199305]]

很多應用中都會有類似組織機構的表,組織機構的表又通常是典型的層次結構(沒有循環節點)。于是通過組織控制數據權限的時候,許多人都喜歡通過connect by獲得組織信息,然后再過濾目標數據。

在有些情況下,這樣寫并沒有什么問題,但有些情況下,這個就是一個大問題。

歸根結底,這是connect by特性導致的,Oracle無法知道connect by之后到底返回多少數據,所以有可能采取一些你所不期望的算法,結果自然不是你所期望的---非常慢。

下面,我就討論在Oracle 12.1.0.2中如果遇到這樣的語句應該如何處理。

為了很好理解,我做了3表:

執行SQL:

  1. SELECT A.CI, A.ENBAJ02 AS CELL_NAME 
  2.   FROM TDL_CM_CELL A, T_ORG_CELL_SCOPE S 
  3.  WHERE S.REGION_NAME = A.REGION_NAME 
  4.   AND S.CITY_NAME = A.CITY_NAME 
  5.   AND (S.ORG_ID) IN (SELECT ID 
  6.                         FROM T_ORG O 
  7.                       START WITH ID = 101021003 --1010210   
  8.                       --START WITH ID=1 
  9.                       CONNECT BY PARENT_ID = PRIOR ID) 

實際使用的執行計劃:

而不會采用自適應計劃(adaptive plan):

  1.  Plan Hash Value  : 2596385940  
  2.  
  3. ------------------------------------------------------------------------------------------------------------------- 
  4. | Id  | Operation                                       | Name                  | Rows | Bytes  | Cost | Time     | 
  5. ------------------------------------------------------------------------------------------------------------------- 
  6. |   0 | SELECT STATEMENT                                |                       | 2622 | 228114 |  227 | 00:00:01 | 
  7. |   1 |   NESTED LOOPS                                  |                       | 2622 | 228114 |  227 | 00:00:01 | 
  8. |   2 |    NESTED LOOPS                                 |                       | 2622 | 228114 |  227 | 00:00:01 | 
  9. | * 3 |     HASH JOIN                                   |                       |    1 |     31 |    7 | 00:00:01 | 
  10. |   4 |      VIEW                                       | VW_NSO_1              |    1 |     13 |    4 | 00:00:01 | 
  11. |   5 |       HASH UNIQUE                               |                       |    1 |     20 |    4 | 00:00:01 | 
  12. | * 6 |        CONNECT BY NO FILTERING WITH SW (UNIQUE) |                       |      |        |      |          | 
  13. |   7 |         TABLE ACCESS FULL                       | T_ORG                 |   75 |    825 |    3 | 00:00:01 | 
  14. |   8 |      TABLE ACCESS FULL                          | T_ORG_CELL_SCOPE      |   85 |   1530 |    3 | 00:00:01 | 
  15. | * 9 |     INDEX RANGE SCAN                            | IDX_TDL_CM_CELL_SCOPE |  257 |        |    8 | 00:00:01 | 
  16. |  10 |    TABLE ACCESS BY INDEX ROWID                  | TDL_CM_CELL           | 2313 | 129528 |  220 | 00:00:01 | 
  17. ------------------------------------------------------------------------------------------------------------------- 
  18.  
  19. Predicate Information (identified by operation id): 
  20. ------------------------------------------ 
  21. * 3 - access("S"."ORG_ID"="ID"
  22. * 6 - access("PARENT_ID"=PRIOR "ID"
  23. * 6 - filter("ID"=101021003) 
  24. * 9 - access("S"."REGION_NAME"="A"."REGION_NAME" AND "S"."CITY_NAME"="A"."CITY_NAME"
  25.  
  26.  
  27. Notes 
  28. ----- 
  29. - This is an adaptive plan 

原因在于,oracle無法知道connect by之后的數量,所以只能認為是很大的量

--

有一種方式就是,就是使用提示來解決:

  1. SELECT /*+ no_merge(x) use_nl(a x) */ 
  2.   A.CI, A.ENBAJ02 AS CELL_NAME 
  3.    FROM TDL_CM_CELL A, 
  4.         (select s.city_name, s.region_name 
  5.            from T_ORG_CELL_SCOPE S 
  6.           WHERE (S.ORG_ID) IN 
  7.                 (SELECT ID 
  8.                    FROM T_ORG O 
  9.                   START WITH ID = 101021003 --1010210   
  10.                  --START WITH ID=1 
  11.                  CONNECT BY PARENT_ID = PRIOR ID) 
  12.           
  13.          ) x 
  14.   where x.REGION_NAME = A.REGION_NAME 
  15.     AND x.CITY_NAME = A.CITY_NAME 

這樣計劃就是:

  1. Plan Hash Value  : 37846894  
  2.  
  3. --------------------------------------------------------------------------------------------------------------------- 
  4. | Id   | Operation                                        | Name                  | Rows | Bytes  | Cost | Time     | 
  5. --------------------------------------------------------------------------------------------------------------------- 
  6. |    0 | SELECT STATEMENT                                 |                       | 2313 | 277560 |  227 | 00:00:01 | 
  7. |    1 |   NESTED LOOPS                                   |                       | 2313 | 277560 |  227 | 00:00:01 | 
  8. |    2 |    NESTED LOOPS                                  |                       | 2313 | 277560 |  227 | 00:00:01 | 
  9. |    3 |     VIEW                                         |                       |    1 |     64 |    7 | 00:00:01 | 
  10. |  * 4 |      HASH JOIN                                   |                       |    1 |     31 |    7 | 00:00:01 | 
  11. |    5 |       VIEW                                       | VW_NSO_1              |    1 |     13 |    4 | 00:00:01 | 
  12. |    6 |        HASH UNIQUE                               |                       |    1 |     20 |    4 | 00:00:01 | 
  13. |  * 7 |         CONNECT BY NO FILTERING WITH SW (UNIQUE) |                       |      |        |      |          | 
  14. |    8 |          TABLE ACCESS FULL                       | T_ORG                 |   75 |    825 |    3 | 00:00:01 | 
  15. |    9 |       TABLE ACCESS FULL                          | T_ORG_CELL_SCOPE      |   85 |   1530 |    3 | 00:00:01 | 
  16. | * 10 |     INDEX RANGE SCAN                             | IDX_TDL_CM_CELL_SCOPE |  257 |        |    8 | 00:00:01 | 
  17. |   11 |    TABLE ACCESS BY INDEX ROWID                   | TDL_CM_CELL           | 2313 | 129528 |  220 | 00:00:01 | 
  18. --------------------------------------------------------------------------------------------------------------------- 
  19.  
  20. Predicate Information (identified by operation id): 
  21. ------------------------------------------ 
  22. * 4 - access("S"."ORG_ID"="ID"
  23. * 7 - access("PARENT_ID"=PRIOR "ID"
  24. * 7 - filter("ID"=101021003) 
  25. * 10 - access("X"."REGION_NAME"="A"."REGION_NAME" AND "X"."CITY_NAME"="A"."CITY_NAME")  

如果一個應用的start id可能是一個很大的范圍,如果強制使用提示,也會出現問題,所以如果有這樣的應用,可以考慮使用oracle 12c的adaptive特性。

如果不行,就必須把不同范圍的查詢,定義為不同的功能提交給用戶。

責任編輯:武曉燕 來源: Linux社區
相關推薦

2010-04-20 15:58:15

Oracle 語句

2010-04-13 15:04:16

Oracle優化

2011-05-20 15:59:06

Oracle存儲Sql語句

2009-03-04 09:06:56

優化sqlOracle

2010-10-25 12:05:40

SYS_CONNECT

2010-10-28 14:02:00

oracle conn

2010-04-12 10:53:07

Oracle SQL

2010-04-26 14:32:21

Oracle SQL

2009-01-14 09:28:12

OracleSQL10g

2010-04-20 09:06:25

Oracle優化

2010-05-05 10:37:40

Oracle優化查詢

2011-06-27 16:26:39

Oracle優化器RBOCBO

2011-04-11 17:28:50

oracle存儲select語句

2010-10-27 15:03:47

Oracle with

2010-04-13 15:14:31

Oracle優化

2010-04-29 16:53:18

Oracle多表關聯

2024-12-05 09:02:00

Pythonif?

2010-11-18 09:19:10

Oracle循環語句

2010-10-27 11:25:13

ORACLE ROWN

2011-04-15 09:53:37

Oracle 10gSQL優化
點贊
收藏

51CTO技術棧公眾號

久艹视频在线免费观看| 无圣光视频在线观看| 亚洲欧美成人vr| 亚洲另类激情图| 亚洲第一中文字幕| 日本蜜桃在线观看| 色综合色狠狠天天综合色| 99热在线看| 国产欧美日韩一区二区三区在线观看| 大陆极品少妇内射aaaaaa| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲国产精品嫩草影院久久av| 日韩在线观看av| 日本搞黄视频| 国产亚洲黄色片| 亚洲欧美视频| 国产精品一区二区免费看| 伊甸园亚洲一区| 欧美大肥婆大肥bbbbb| 免费观看亚洲| 欧美一区二区三区公司| 天天综合视频在线观看| 在线观看亚洲a| 黄色小视频在线免费观看| 精品成人av一区| 久久久久中文字幕2018| 色帝国亚洲欧美在线| 日韩一级二级三级| 91超碰在线| 最新日韩中文字幕| 国产成人精品一区二区三区在线 | 美女91在线看| 亚洲欧美中文字幕在线一区| 中文字幕av一区二区三区佐山爱| 一本一本久久a久久精品综合小说| 国产综合色区在线观看| 久久91亚洲精品中文字幕奶水| 伦理一区二区| 91精品国产一区二区三区动漫| 国产精品大片| 亚洲 日韩 国产第一区| 国产麻豆精品久久一二三| 久久国产精品网| 国产精品色噜噜| 天堂av免费观看| 欧美日韩色综合| 色婷婷综合久久久中字幕精品久久| 欧美wwwxxxx| 98精品视频| 视频一区二区综合| 久久久久99精品一区| 在线天堂av| 91精品国产91久久综合桃花 | 99国产精品白浆在线观看免费| 成人激情校园春色| www.男人的天堂| 欧美亚洲日本一区| 国模冰冰炮一区二区| 久久久久久久久久久久久久久久久久av| 精品福利久久久| 欧美亚洲免费高清在线观看| 成人一区在线观看| 一二三区高清| 亚洲国产精品久久久久秋霞蜜臀 | 精品久久福利| 国产日韩欧美视频| 欧美日韩爱爱视频| 久久伊人影院| 91免费国产网站| 国产美女精品一区二区三区| 亚洲最大成人在线观看| 欧美色男人天堂| 欧美日一区二区三区| 国产精品激情自拍| 免费看精品久久片| xx欧美撒尿嘘撒尿xx| 欧美精品vⅰdeose4hd| 视频在线观看免费影院欧美meiju| 国产在线精品播放| 免费av手机在线观看| 亚洲永久精品大片| 精品毛片乱码1区2区3区| 亚洲精品三区| 成人黄色午夜影院| 99精品视频在线观看免费| 在线观看国产视频| 欧美日韩国产传媒| 91成人综合网| 91精品91久久久中77777| 亚洲伊人精品酒店| 久久精品一二三区| 亚洲男女毛片无遮挡| 精品欧美一区二区三区在线观看| 91久久精品国产91久久| av电影在线观看不卡| 午夜在线激情影院| 亚洲永久免费观看| 亚洲欧洲精品成人久久奇米网| 精精国产xxxx视频在线野外| av成人午夜| 亚洲午夜免费福利视频| 亚洲精品一区av| 亚洲bbw性色大片| 色综合久久久久综合| 伦理一区二区| 欧美韩国日本在线| 国产一区二区三区四区福利| 肉肉av福利一精品导航| 牛牛影视精品影视| 国产精品电影观看| 欧美韩国一区二区| 欧美日韩尤物久久| 亚洲国产精品一区二区第一页| 色婷婷综合在线| 久久综合88| 2020中文字幕在线| 高清一区二区三区四区五区| 91色视频在线| 青青久久精品| 蜜臀精品一区二区| 亚洲欧美激情在线视频| 久久av一区二区三区| 91精品专区| 国产欧美丝袜| 欧美日本一区二区三区四区 | 在线国产日韩| 午夜视频在线观看韩国| 欧美一区在线直播| 国产精品对白交换视频| jizz性欧美2| 成人性a激情免费视频| 国内精品国产三级国产在线专| 久久夜色精品国产噜噜av| a屁视频一区二区三区四区| 免费看欧美一级片| 最好看的2019年中文视频| 99这里都是精品| gogo大尺度成人免费视频| 免费高清在线观看免费| 欧美精品九九久久| 亚洲欧美日本在线| 外国成人免费视频| 美女国产在线| 国产精品av免费| 久久精品国产一区二区电影| 中国av一区二区三区| 成人av资源网址| 视频在线91| 久久草.com| 日韩精品亚洲元码| 不卡电影一区二区三区| 久久porn| 青青草视频在线免费观看| 国内精品**久久毛片app| 亚洲成人999| 成人激情综合网站| 色天下一区二区三区| 国产资源在线观看| 亚洲春色综合另类校园电影| www.xxxx欧美| 亚洲综合激情另类小说区| 欧美成人一品| 国产社区精品视频| 欧美午夜性生活| 成人a视频在线观看| 欧美日韩精品系列| 成人免费视频播放| 国产亚洲一区| 在线视频中文字幕第一页| 成人免费在线网| 日本成人激情视频| 欧美精品 国产精品| 国产乱人伦精品一区二区在线观看 | 国产精品日日摸夜夜添夜夜av| 在线一区二区三区四区五区 | 日韩一区二区三区高清| 色爱精品视频一区| 夜夜嗨av一区二区三区中文字幕| 欧美日韩国产免费观看| 久久精品女人天堂av免费观看| 羞羞的视频免费| 茄子视频成人在线观看 | 免费视频亚洲| av网址在线免费观看| 欧美私人情侣网站| 99久久伊人精品影院| 亚洲欧洲日本专区| 午夜视黄欧洲亚洲| 成熟亚洲日本毛茸茸凸凹| 希岛爱理av一区二区三区| 女生影院久久| 最色在线观看| 日韩欧美精品免费| 亚洲影院污污.| 在线视频精品一| 欧美日韩在线播| 中文字幕亚洲欧美在线不卡| 美腿丝袜亚洲色图| 一区二区三区四区日韩| 小说区图片区亚洲|