oracle函数索引小结
来源:互联网 发布:linux ctrl alt del 编辑:程序博客网 时间:2024/05/29 13:39
函数索引的概念:
基于函数的索引也是8i以来的新产物,它有索引计算列的能力,它易于使用并且提供计算好的值,在不修改应用程序的逻辑上提高了查询性能。使用基于函数的索引有几个先决条件:
(1)
必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其他模式下)权限。
(2)
必须使用基于成本的优化器,基于规则的优化器将被忽略。
(3)
必须设置以下两个系统参数:
- QUERY_REWRITE_ENABLED=TRUE
- QUERY_REWRITE_INTEGRITY=TRUSTED
可以通过alter system set,alter session set在系统级或线程级设置,也可以通过在init.ora添加实现。
这里举一个基于函数的索引的例子:
函数索引建立及数据准备:
SQL> create index test.ind_fun on test.testindex(upper(a));
索引已创建。
SQL> insert into testindex values('a',2);
已创建 1 行。
SQL> commit;
提交完成。
索引已创建。
SQL> insert into testindex values('a',2);
已创建 1 行。
SQL> commit;
提交完成。
强制使用基于规则的优化器,所以不会使用函数索引:
SQL> select /*+ RULE*/* FROM test.testindex where upper(a)='A';
A B
-- ----------
a 2
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE
1 0 TABLE ACCESS (FULL) OF 'TESTINDEX'
(优化器选择了全表扫描)
--------------------------------------------------------------------
A B
-- ----------
a 2
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=HINT: RULE
1 0 TABLE ACCESS (FULL) OF 'TESTINDEX'
(优化器选择了全表扫描)
--------------------------------------------------------------------
使用函数索引:
SQL> select * FROM test.testindex where upper(a)='A';
A B
-- ----------
a 2
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=5)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TESTINDEX' (Cost=2 Card=1 Bytes=5)
2 1 INDEX (RANGE SCAN) OF 'IND_FUN' (NON-UNIQUE) (Cost=1 Card=1)
(使用了ind_fun索引)
A B
-- ----------
a 2
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=5)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TESTINDEX' (Cost=2 Card=1 Bytes=5)
2 1 INDEX (RANGE SCAN) OF 'IND_FUN' (NON-UNIQUE) (Cost=1 Card=1)
(使用了ind_fun索引)
此处有一种方案,不使用函数索引,通过sql上的技巧来使用原有列上的索引。不过我觉得还不如建立函数索引来的方便。
- oracle函数索引小结
- 72、oracle函数索引小结
- oracle索引知识小结
- Oracle索引小结
- oracle索引-函数索引
- oracle函数索引
- oracle创建函数索引
- oracle函数索引
- Oracle函数索引
- oracle函数索引
- oracle函数索引
- oracle 函数索引
- oracle 函数索引
- oracle函数索引
- oracle 监控函数索引
- oracle创建函数索引
- Oracle函数索引
- oracle函数索引
- CET的中文版
- 程序开发界面与代码分离技术-界面描述语言
- 关于设计模式的概念
- JNI 调用C/C++
- ArcIMS的体系结构
- oracle函数索引小结
- Ubuntu 9.04 使用 virtualbox usb
- Apache2.2+Subversion1.6.6+TortoiseSVN1.6.6
- 处理apt-get update遇到的PUB KEY GPG ERROR
- 程序员的温情管理文化
- 有用的博客
- 电子商务中网络安全的具体问题
- 初学者之----存储过程错误处理的格式。
- debian sourceslist configuration