查看: 3742|回复: 7

[讨论] 在CHAR字段上建立函数索引后,不同执行计划下的结果集不同

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2009-5-13 13:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在测试函数索引,发现在一个表的CHAR字段上建立函数索引之后,检索结果出现了变化

先建立个测试表,使用CHAR类型
create table test (
    a char(10),
    b char(10)
    );
insert into test values ('111','111');
insert into test values ('222','222');
commit;


SQL> select * from test;

A          B
---------- ----------
111        111
222        222

SQL> select * from test where a = '111';

A          B
---------- ----------
111        111

SQL> create index test_index on test (substr(a,1,1));

Index created

SQL> select * from test;

A          B
---------- ----------
111        111
222        222

SQL> select * from test where a = '111';

A          B
---------- ----------


困惑ing......
再试


SQL> select /*+ INDEX(test) */ * from test where a= '111';

A          B
---------- ----------

SQL> select /*+ FULL(test) */ * from test where a= '111';

A          B
---------- ----------
111        111


崩溃鸟。。。。。。


换成varchar2类型再看

drop table test;

create table test (
    a varchar2(10),
    b char(10)
    );
insert into test values ('111','111');
insert into test values ('222','222');
commit;

SQL> select * from test;

A          B
---------- ----------
111        111
222        222

SQL> select * from test where a = '111';

A          B
---------- ----------
111        111

SQL> create index test_index on test (substr(a,1,1));

Index created

SQL> select * from test;

A          B
---------- ----------
111        111
222        222

SQL> select /*+ INDEX(test) */ * from test where a= '111';

A          B
---------- ----------
111        111
SQL> select /*+ FULL(test) */ * from test where a= '111';

A          B
---------- ----------
111        111




SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE        10.2.0.1.0        Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production


再次败给oracle,这应该是个bug吧?
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
2#
发表于 2009-5-13 13:33 | 只看该作者
Bug 6131467

使用道具 举报

回复
论坛徽章:
0
3#
 楼主| 发表于 2009-5-13 13:47 | 只看该作者
原帖由 棉花糖ONE 于 2009-5-13 13:33 发表
Bug 6131467


果然,多谢棉花糖

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
4#
发表于 2009-5-13 14:02 | 只看该作者
11.1.0.6上也有这个问题,似乎11.1.0.7解决这个bug,Oracle在11.2 fixed了这个bug。

Bug 5739162 - Wrong result when SUBSTR is used in functional index

使用道具 举报

回复
论坛徽章:
226
BLOG每日发帖之星
日期:2010-02-11 01:01:06紫蛋头
日期:2013-01-12 23:45:222013年新春福章
日期:2013-02-25 14:51:24问答徽章
日期:2013-10-17 18:06:40优秀写手
日期:2013-12-18 09:29:10马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
5#
发表于 2009-5-13 14:07 | 只看该作者
5739162 和 6131467 应该是同一个bug

使用道具 举报

回复
论坛徽章:
0
6#
 楼主| 发表于 2009-5-13 14:08 | 只看该作者
原帖由 yangtingkun 于 2009-5-13 14:02 发表
11.1.0.6上也有这个问题,似乎11.1.0.7解决这个bug,Oracle在11.2 fixed了这个bug。

Bug 5739162 - Wrong result when SUBSTR is used in functional index


谢谢杨版

刚也查到有别的贴子讨论过这个问题,说测试了9.2.0.4没问题,10和11.1.0.6中都有问题

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
7#
发表于 2009-5-13 14:15 | 只看该作者
问题其实并不是走函数索引出错了,根据谓词信息改写成如下sql就没问题

select * from (select * from test where substr(a,1,1)='1') where a='111';

使用道具 举报

回复
论坛徽章:
138
19周年集字徽章-19
日期:2020-06-08 08:30:56马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-18 16:42:022014年新春福章
日期:2014-02-18 16:42:02路虎
日期:2013-11-22 12:26:18问答徽章
日期:2014-05-08 12:15:31
8#
发表于 2009-5-13 14:16 | 只看该作者

回复 #4 yangtingkun 的帖子

11.0.6也有这问题,刚才也测试过

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表