Oracle 11gR2 – 查看功能列评估
发布时间:2021-01-12 17:56:03 所属栏目:站长百科 来源:网络整理
导读:对于具有为列定义的函数以及何时评估这些函数的Oracle视图,我似乎有一个奇怪的问题. 假设我有以下视图和函数定义: CREATE OR REPLACE VIEW test_view_one ASSELECT column_one,a_package.function_that_returns_a_value(column_one) function_columnFROM a_
Execution Plan ---------------------------------------------------------- ---------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 25 | 54200 | 144 (0)| | 1 | FAST DUAL | | 1 | | 2 (0)| | 2 | FAST DUAL | | 1 | | 2 (0)| |* 3 | VIEW | | 25 | 54200 | 144 (0)| |* 4 | COUNT STOPKEY | | | | | | 5 | VIEW | | 26 | 56030 | 144 (0)| | 6 | COUNT | | | | | |* 7 | FILTER | | | | | | 8 | NESTED LOOPS ANTI | | 30 | 3210 | 144 (0)| | 9 | NESTED LOOPS OUTER | | 30 | 2580 | 114 (0)| | 10 | NESTED LOOPS ANTI | | 30 | 2220 | 84 (0)| | 11 | NESTED LOOPS ANTI | | 32 | 1824 | 52 (0)| | 12 | TABLE ACCESS BY INDEX ROWID| DEMISE | 130K| 5979K| 18 (0)| | 13 | INDEX FULL SCAN | DEMISEI4 | 34 | | 3 (0)| |* 14 | INDEX RANGE SCAN | CODESGENI3 | 1 | 10 | 1 (0)| |* 15 | INDEX RANGE SCAN | TNNTMVINI1 | 1 | 17 | 1 (0)| |* 16 | INDEX RANGE SCAN | USERDATAI1 | 1 | 12 | 1 (0)| |* 17 | INDEX RANGE SCAN | DMSELEASI4 | 1 | 21 | 1 (0)| | 18 | TABLE ACCESS FULL | QCDUAL | 1 | | 3 (0)| ---------------------------------------------------------------------------------------- 我完全理解第二个计划是做得少,但这并不能解释为什么函数没有被评估…至少不是我可以解决的. 解决方法可以执行 Pagination with ROWNUM有两种方式: A)使用优化排序完全扫描行源(限于前N行)或 B)行源的索引访问完全没有排序 这里是案例A的简化示例 SELECT *
FROM
(SELECT a.*,ROWNUM rnum
FROM
( SELECT * FROM test_view_one ORDER BY id
) a
WHERE ROWNUM <= 25
)
WHERE rnum >= 1
相应的执行计划如下所示(请注意,我也预先发布了部分内容 -----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes |TempSpc| Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 25 | 975 | | 1034 (1)| 00:00:01 |
|* 1 | VIEW | | 25 | 975 | | 1034 (1)| 00:00:01 |
|* 2 | COUNT STOPKEY | | | | | | |
| 3 | VIEW | | 90000 | 2285K| | 1034 (1)| 00:00:01 |
|* 4 | SORT ORDER BY STOPKEY| | 90000 | 439K| 1072K| 1034 (1)| 00:00:01 |
| 5 | TABLE ACCESS FULL | TEST | 90000 | 439K| | 756 (1)| 00:00:01 |
-----------------------------------------------------------------------------------------
Column Projection Information (identified by operation id):
-----------------------------------------------------------
...
3 - "A"."ID"[NUMBER,22],"A"."FUNCTION_COLUMN"[NUMBER,22]
4 - (#keys=1) "ID"[NUMBER,"MY_PACKAGE"."MY_FUNCTION"("ID")[22]
5 - "ID"[NUMBER,22]
在执行过程中,使用FULL SCAN访问该表,即所有记录都是红色的. 这里是案例B的执行计划 (编辑:百科站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 美的电磁炉啥样 美的电磁炉价格多少钱
- 电加热棒怎么样 电加热棒性能特点
- Windows11跟Windows7哪个好 Win11和Win7有什么不同
- “养号”平台成网络黑产链重要一环 专家吁落实实名制
- OPPO Reno5系列的泄漏揭示了规格和价格;可能于12月10日推出
- 哪种空气净化器好 空气净化加湿机原理剖析
- 用于设计的Lotus Notes XPages和用于数据的Oracle(或其他RD
- 飞利浦空气净化器滤网怎样 飞利浦空气净化器滤网介绍
- 如果可能,Oracle数据库中的每个字段都应该具有检查约束吗?
- oracle – classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.
站长推荐

