Oracle之函数索引修改,重建索引
来源:互联网 发布:jquery 清空表格数据 编辑:程序博客网 时间:2024/05/19 03:20
--函数索引陷阱
--自定义函数使用函数索引要注意函数代码改变后的影响。
drop table t purge;
create table t ( x number, y varchar2(30));
set autotrace off
insert into t SELECT rownum, rownum||'a' FROM dual connect by rownum < 1000;
create or replace
package pkg_f is
function f(p_value varchar2) return varchar2 deterministic;
end;
/
create or replace
package body pkg_f is
function f(p_value varchar2) return varchar2
deterministic is
begin
return p_value;
end;
end;
/
create index idx_pkg_f_y on t ( pkg_f.f(y));
analyze table t compute statistics for table for all indexes for all indexed columns;
set autotrace on explain
SELECT * FROM t WHERE pkg_f.f(y)= '8a';
将包的代码修改如下:
create or replace
package body pkg_f is
function f(p_value varchar2) return varchar2
deterministic is
begin
return p_value||'b';
end;
end;
/
惊奇地发现查询出错误的值:
SELECT * FROM t WHERE pkg_f.f(y)= '8a';
在索引重建查询没有记录,这才是正确的结果:
drop index idx_pkg_f_y;
create index idx_pkg_f_y on t ( pkg_f.f(y));
--自定义函数使用函数索引要注意函数代码改变后的影响。
drop table t purge;
create table t ( x number, y varchar2(30));
set autotrace off
insert into t SELECT rownum, rownum||'a' FROM dual connect by rownum < 1000;
create or replace
package pkg_f is
function f(p_value varchar2) return varchar2 deterministic;
end;
/
create or replace
package body pkg_f is
function f(p_value varchar2) return varchar2
deterministic is
begin
return p_value;
end;
end;
/
create index idx_pkg_f_y on t ( pkg_f.f(y));
analyze table t compute statistics for table for all indexes for all indexed columns;
set autotrace on explain
SELECT * FROM t WHERE pkg_f.f(y)= '8a';
将包的代码修改如下:
create or replace
package body pkg_f is
function f(p_value varchar2) return varchar2
deterministic is
begin
return p_value||'b';
end;
end;
/
惊奇地发现查询出错误的值:
SELECT * FROM t WHERE pkg_f.f(y)= '8a';
在索引重建查询没有记录,这才是正确的结果:
drop index idx_pkg_f_y;
create index idx_pkg_f_y on t ( pkg_f.f(y));
SELECT * FROM t WHERE pkg_f.f(y)= '8a';
解析:当函数变更后,需要重建函数索引,不然查询结果不变。
阅读全文
0 0
- Oracle之函数索引修改,重建索引
- 重建ORACLE数据库索引
- 重建所有索引(Oracle)
- Oracle批量重建索引
- oracle重建索引
- Oracle重建索引
- oracle 重建索引
- oracle中重建索引
- oracle重建索引
- Oracle索引重建
- Oracle 重建索引
- oracle重建索引
- oracle script: 重建索引
- Oracle 重建索引脚本
- oracle重建索引
- ORACLE重建索引详解
- oracle重建索引
- Oracle批量重建索引
- git使用
- MTK 6.0 Alarm机制时序图
- 自己的一点菜鸡错误
- zabbix监控交换机
- HTTP之X-Requested-With分析和思考
- Oracle之函数索引修改,重建索引
- 十大Material Design开源项目
- 恶心规律模拟题
- stringstream
- Python -while、for、continue、break语句
- 鸟哥私房菜 第十九章 认识分析日志文件
- 大型网站架构演变和知识体系
- Django 博客
- 用 Clonezilla 光盘备份硬盘分区