物化视图与绑定变量

[复制链接]
查看11 | 回复5 | 2007-8-23 08:30:28 | 显示全部楼层 |阅读模式
各位大侠,这里我出现了一个关于物化视图方面的问题,还请大侠们多多指教!
现在我需要查询使用物化视图,而不是基表.
如果我不使用绑定变量的话,计划会走物化视图
但是如果使用绑定变量的话,计划就走基表,不走物化视图了,这不是我想要的结果
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - 64bi
PL/SQL Release 10.1.0.3.0 - Production
CORE10.1.0.3.0Production
TNS for Linux: Version 10.1.0.3.0 - Production
NLSRTL Version 10.1.0.3.0 - Production
SQL> show parameter REWRITE
NAME
TYPEVALUE
------------------------------------ ----------- ------------------------------
query_rewrite_enabled
stringTRUE
query_rewrite_integrity
stringTRUSTED
SQL> SELECT X.KSPPINM NAME, Y.KSPPSTVL VALUE, Y.KSPPSTDF ISDEFAULT,
2 DECODE (BITAND (Y.KSPPSTVF, 7),
3
1, 'MODIFIED',
4
4, 'SYSTEM_MOD',
5
'FALSE'
6
) ISMOD,
7 DECODE (BITAND (Y.KSPPSTVF, 2), 2, 'TRUE', 'FALSE') ISADJ
8FROM SYS.X$KSPPI X, SYS.X$KSPPCV Y
9 WHERE X.INST_ID = USERENV ('Instance')
10 AND Y.INST_ID = USERENV ('Instance')
11 AND X.INDX = Y.INDX
12 AND X.KSPPINM LIKE '%_&PARA%'
13ORDER BY TRANSLATE (X.KSPPINM, '_', '')
14/
Enter value for para: optim_peek
old12:AND X.KSPPINM LIKE '%_&PARA%'
new12:AND X.KSPPINM LIKE '%_optim_peek%'
NAME
VALUE
ISDEFAULT ISMODISADJ
---------------------------------------- ------------------------- --------- ---------- -----
_optim_peek_user_binds
TRUE
TRUEFALSEFALSE

基表:T_BILL_HEADER,T_BILL_DETAIL
物化视图:T_BILL_HEADER_DETAIL 定义如下
(BUILD IMMEDIATE REFRESH FAST ON COMMIT WITH PRIMARY KEY ENABLE QUERY REWRITE AS SELECT .... FROM T_BILL_HEADER, T_BILL_DETAIL
WHERE T_BILL_HEADER.BSEQID = T_BILL_DETAIL.BSEQID)
使用绑定变量
SELECT USERNAME, CHECKERNAME COUNTNUM
FROM T_BILL_HEADER, T_BILL_DETAIL, T_BILL_PAGE
WHERE (T_BILL_HEADER.BSEQID = T_BILL_DETAIL.BSEQID)
AND (T_BILL_PAGE.BSEQID = T_BILL_DETAIL.BSEQID)
AND (T_BILL_PAGE.PAGENO = T_BILL_DETAIL.PAGENO)
AND (T_BILL_HEADER.DEPTID = 2)
AND (T_BILL_HEADER.TIMEVALIDATED >= :ADT_START)
AND (T_BILL_HEADER.TIMEVALIDATED = TO_DATE('2006-05-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'))
AND (T_BILL_HEADER.TIMEVALIDATED <= TO_DATE('2006-05-31 23:59:59', 'YYYY-MM-DD HH24:MI:SS'))
计划是:Plan
SELECT STATEMENTALL_ROWSCost: 4,916Bytes: 9,483,334Cardinality: 152,957


5 HASH JOINCost: 4,916Bytes: 9,483,334Cardinality: 152,957


3 PARTITION RANGE SINGLECost: 1,513Bytes: 7,665,600Cardinality: 159,700Partition #: 2Partitions accessed #6


2 PARTITION HASH SINGLECost: 1,513Bytes: 7,665,600Cardinality: 159,700Partition #: 3Partitions accessed #1


1 MAT_VIEW REWRITE ACCESS FULL MAT_VIEW REWRITE POWERERP.T_BILL_HEADER_DETAIL Cost: 1,513Bytes: 7,665,600Cardinality: 159,700Partition #: 4Partitions accessed #6

4 TABLE ACCESS FULL TABLE POWERERP.T_BILL_PAGE Cost: 1,196Bytes: 19,655,342Cardinality: 1,403,953

请问如何解决
回复

使用道具 举报

千问 | 2007-8-23 08:30:28 | 显示全部楼层
难道使用绑定变量会使CBO增加物化视图查询重写的成本吗?
回复

使用道具 举报

千问 | 2007-8-23 08:30:28 | 显示全部楼层
用了绑定变量oracle不知道适不适合查询重写,是这原因吗
回复

使用道具 举报

千问 | 2007-8-23 08:30:28 | 显示全部楼层
是的啊
因为看上面的cost是增大,还有不知道支持不支持
回复

使用道具 举报

千问 | 2007-8-23 08:30:28 | 显示全部楼层
如果你是9i以后的版本,做个测试,flush shared_pool,让它做硬分析,收集柱状图,看看是否能查询重写,绑定变量的值要符合查询重写的条件的
回复

使用道具 举报

千问 | 2007-8-23 08:30:28 | 显示全部楼层
绑定变量的值要符合查询重写的条件的
请问大侠,这句怎么理解呢?
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行