Bo's Oracle Station

查看: 1733|回复: 0

物化视图查询重写

[复制链接]

1005

主题

1469

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12012
发表于 2022-5-11 16:34:57 | 显示全部楼层 |阅读模式
  1. SQL> SELECT SUM(p.prod_list_price - p.prod_min_price) M1,
  2.              COUNT(p.prod_category) M2, p.prod_category, sum(s.AMOUNT_SOLD)  FROM products p, sales s
  3.              where s.prod_id=p.prod_id
  4.              GROUP BY prod_category;  2    3    4  

  5.         M1           M2 PROD_CATEGORY                                         SUM(S.AMOUNT_SOLD)
  6. ---------- ---------- -------------------------------------------------- ------------------
  7.          0     116267 Electronics                                                 14597515.6
  8.          0        95509 Photo                                                         17961865.9
  9.          0     286369 Peripherals and Accessories                                 31163988.4
  10.          0     405341 Software/Other                                                 13834855.7
  11.          0        15357 Hardware                                                         20647605.6


  12. Execution Plan
  13. ----------------------------------------------------------
  14. Plan hash value: 2958490228

  15. -------------------------------------------------------------------------------------
  16. | Id  | Operation                     | Name | Rows  | Bytes | Cost (%CPU)| Time     |
  17. -------------------------------------------------------------------------------------
  18. |   0 | SELECT STATEMENT             |            |          5 |        140 |          3   (0)| 00:00:01 |
  19. |   1 |  MAT_VIEW REWRITE ACCESS FULL| MV1  |          5 |        140 |          3   (0)| 00:00:01 |
  20. -------------------------------------------------------------------------------------

  21. Note
  22. -----
  23.    - automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold


  24. Statistics
  25. ----------------------------------------------------------
  26.          92  recursive calls
  27.          23  db block gets
  28.          78  consistent gets
  29.           0  physical reads
  30.        4136  redo size
  31.         984  bytes sent via SQL*Net to client
  32.         568  bytes received via SQL*Net from client
  33.           2  SQL*Net roundtrips to/from client
  34.           5  sorts (memory)
  35.           0  sorts (disk)
  36.           5  rows processed

  37. SQL> alter session query_rewrite_enabled=false;
  38. alter session query_rewrite_enabled=false
  39.               *
  40. ERROR at line 1:
  41. ORA-00922: missing or invalid option


  42. SQL> show parameter query

  43. NAME                                     TYPE         VALUE
  44. ------------------------------------ ----------- ------------------------------
  45. inmemory_query                             string         ENABLE
  46. multishard_query_data_consistency    string         strong
  47. multishard_query_partial_results     string         not allowed
  48. query_rewrite_enabled                     string         TRUE
  49. query_rewrite_integrity              string         enforced
  50. SQL> alter session set query_rewrite_enabled=false;

  51. Session altered.

  52. SQL> SELECT SUM(p.prod_list_price - p.prod_min_price) M1,
  53.              COUNT(p.prod_category) M2, p.prod_category, sum(s.AMOUNT_SOLD)  FROM products p, sales s
  54.              where s.prod_id=p.prod_id
  55.              GROUP BY prod_category;  2    3    4  

  56.         M1           M2 PROD_CATEGORY                                         SUM(S.AMOUNT_SOLD)
  57. ---------- ---------- -------------------------------------------------- ------------------
  58.          0     116267 Electronics                                                 14597515.6
  59.          0        95509 Photo                                                         17961865.9
  60.          0     286369 Peripherals and Accessories                                 31163988.4
  61.          0     405341 Software/Other                                                 13834855.7
  62.          0        15357 Hardware                                                         20647605.6


  63. Execution Plan
  64. ----------------------------------------------------------
  65. Plan hash value: 3535171836

  66. ----------------------------------------------------------------------------------------------------------
  67. | Id  | Operation                      | Name         | Rows  | Bytes | Cost (%CPU)| Time         | Pstart| Pstop |
  68. ----------------------------------------------------------------------------------------------------------
  69. |   0 | SELECT STATEMENT              |          |     5 |   200 |    59  (50)| 00:00:01 |         |         |
  70. |   1 |  HASH GROUP BY                      |          |     5 |   200 |    59  (50)| 00:00:01 |         |         |
  71. |*  2 |   HASH JOIN                      |          |   918K|    35M|    38  (22)| 00:00:01 |         |         |
  72. |   3 |    TABLE ACCESS FULL              | PRODUCTS |    72 |  2232 |     3   (0)| 00:00:01 |         |         |
  73. |   4 |    PARTITION RANGE ALL              |          |   918K|  8075K|    32  (16)| 00:00:01 |     1 |    28 |
  74. |   5 |     TABLE ACCESS INMEMORY FULL| SALES         |   918K|  8075K|    32  (16)| 00:00:01 |     1 |    28 |
  75. ----------------------------------------------------------------------------------------------------------

  76. Predicate Information (identified by operation id):
  77. ---------------------------------------------------

  78.    2 - access("S"."PROD_ID"="P"."PROD_ID")

  79. Note
  80. -----
  81.    - automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold


  82. Statistics
  83. ----------------------------------------------------------
  84.          19  recursive calls
  85.           0  db block gets
  86.          50  consistent gets
  87.           0  physical reads
  88.           0  redo size
  89.         984  bytes sent via SQL*Net to client
  90.         591  bytes received via SQL*Net from client
  91.           2  SQL*Net roundtrips to/from client
  92.           3  sorts (memory)
  93.           0  sorts (disk)
  94.           5  rows processed

  95. SQL>
复制代码
  1. SQL>  @?/rdbms/admin/utlxrw.sql;

  2. Table created.

  3. SQL> exec dbms_mview.explain_rewrite('SELECT SUM(prod_list_price - prod_min_price) M1, COUNT(prod_category) M2, prod_category FROM products GROUP BY prod_category', 'PROD_MV');

  4. PL/SQL procedure successfully completed.

  5. SQL> select message from rewrite_table order by sequence;

  6. MESSAGE
  7. --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  8. QSM-01150: query did not rewrite
  9. QSM-01091: cost based optimizer found query rewrite is more expensive
  10. QSM-01209: query rewritten with materialized view, PROD_MV, using text match algorithm

  11. SQL> exec dbms_stats.gather_schema_stats('SH');

  12. PL/SQL procedure successfully completed.
复制代码
  1. declare
  2. v_task  varchar2(32);
  3. v_sqltext varchar2(4000);
  4. begin
  5. v_sqltext := ' CREATE MATERIALIZED VIEW sh.mv1 AS SELECT SUM(p.prod_list_price - p.prod_min_price) M1, COUNT(p.prod_category) M2, p.prod_category, sum(s.AMOUNT_SOLD)  FROM sh.products p, sh.sales s where s.prod_id=p.prod_id GROUP BY prod_category';
  6. dbms_advisor.tune_mview(v_task,v_sqltext);
  7. dbms_advisor.create_file(dbms_advisor.get_task_script(v_task),'DIR1','tunemv.sql');
  8. end;
  9. /
复制代码
  1. Rem  SQL Access Advisor: Version 19.0.0.0.0 - Production
  2. Rem
  3. Rem  Username:        SYS
  4. Rem  Task:            TASK_3753
  5. Rem  Execution date:
  6. Rem

  7. CREATE MATERIALIZED VIEW LOG ON
  8.     "SH"."SALES"
  9.     WITH ROWID, SEQUENCE("PROD_ID","AMOUNT_SOLD")
  10.     INCLUDING NEW VALUES;

  11. ALTER MATERIALIZED VIEW LOG FORCE ON
  12.     "SH"."SALES"
  13.     ADD ROWID, SEQUENCE("PROD_ID","AMOUNT_SOLD")
  14.     INCLUDING NEW VALUES;

  15. CREATE MATERIALIZED VIEW LOG ON
  16.     "SH"."PRODUCTS"
  17.     WITH ROWID, SEQUENCE("PROD_ID","PROD_CATEGORY","PROD_LIST_PRICE","PROD_MIN_PRICE")
  18.     INCLUDING NEW VALUES;

  19. ALTER MATERIALIZED VIEW LOG FORCE ON
  20.     "SH"."PRODUCTS"
  21.     ADD ROWID, SEQUENCE("PROD_ID","PROD_CATEGORY","PROD_LIST_PRICE","PROD_MIN_PRICE")
  22.     INCLUDING NEW VALUES;

  23. CREATE MATERIALIZED VIEW "SH"."MV1"
  24.     REFRESH FAST WITH ROWID
  25.     DISABLE QUERY REWRITE
  26.     AS SELECT "SH"."PRODUCTS"."PROD_CATEGORY" C1, COUNT("SH"."PRODUCTS"."PROD_CATEGORY")
  27.        M1, SUM("SH"."PRODUCTS"."PROD_LIST_PRICE"-"SH"."PRODUCTS"."PROD_MIN_PRICE")
  28.        M2, COUNT("SH"."PRODUCTS"."PROD_LIST_PRICE"-"SH"."PRODUCTS"."PROD_MIN_PRICE")
  29.        M3, SUM("SH"."SALES"."AMOUNT_SOLD") M4, COUNT("SH"."SALES"."AMOUNT_SOLD")
  30.        M5, COUNT(*) M6 FROM "SH"."PRODUCTS", "SH"."SALES" WHERE "SH"."SALES"."PROD_ID"
  31.        = "SH"."PRODUCTS"."PROD_ID" GROUP BY "SH"."PRODUCTS"."PROD_CATEGORY";
复制代码

  1.   begin
  2.     dbms_mview.explain_mview('MV1');
  3.   end;
  4.   /
复制代码
  1.   select  * from mv_capabilities_table;      
复制代码
  1.    truncate table    mv_capabilities_table;
  2.     SH    MV1    PCT    N                    1
  3.     SH    MV1    REFRESH_COMPLETE    Y                    1002
  4.     SH    MV1    REFRESH_FAST    Y                    2003
  5.     SH    MV1    REWRITE    N                    3004
  6.     SH    MV1    PCT_TABLE    N    SH.PRODUCTS    359    2068    relation is not a partitioned table    4005
  7.     SH    MV1    PCT_TABLE    N    SH.SALES    376    2067    no partition key or PMARKER or join dependent expression in select list    4006
  8.     SH    MV1    REFRESH_FAST_AFTER_INSERT    Y                    5007
  9.     SH    MV1    REFRESH_FAST_AFTER_ONETAB_DML    Y                    6008
  10.     SH    MV1    REFRESH_FAST_AFTER_ANY_DML    Y                    7009
  11.     SH    MV1    REFRESH_FAST_PCT    N            2157    PCT is not possible on any of the detail tables in the materialized view    8010
  12.     SH    MV1    REWRITE_FULL_TEXT_MATCH    N            2159    query rewrite is disabled on the materialized view    9011
  13.     SH    MV1    REWRITE_PARTIAL_TEXT_MATCH    N            2159    query rewrite is disabled on the materialized view    10012
  14.     SH    MV1    REWRITE_GENERAL    N            2159    query rewrite is disabled on the materialized view    11013
  15.     SH    MV1    REWRITE_PCT    N            2158    general rewrite is not possible or PCT is not possible on any of the detail tables    12014
  16.     SH    MV1    PCT_TABLE_REWRITE    N    SH.PRODUCTS    359    2068    relation is not a partitioned table    13015
  17.     SH    MV1    PCT_TABLE_REWRITE    N    SH.SALES    376    2185    no partition key or PMARKER in select list    13016
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Bo's Oracle Station   

GMT+8, 2024-4-27 15:01 , Processed in 0.036179 second(s), 24 queries .

快速回复 返回顶部 返回列表