查看: 2937|回复: 12

看看我建函數索引的步驟哪里錯了?

[复制链接]
论坛徽章:
17
授权会员
日期:2006-01-24 14:18:52生肖徽章2007版:鸡
日期:2009-06-05 16:44:33生肖徽章2007版:牛
日期:2009-05-19 17:07:16生肖徽章2007版:虎
日期:2009-05-08 15:23:04生肖徽章2007版:鸡
日期:2009-04-13 09:31:30生肖徽章2007版:龙
日期:2009-04-09 09:01:52生肖徽章2007版:龙
日期:2009-03-03 13:16:23生肖徽章2007版:龙
日期:2009-02-12 09:46:51生肖徽章2007版:马
日期:2009-01-12 12:30:20生肖徽章2007版:猴
日期:2008-12-02 13:43:41
跳转到指定楼层
1#
发表于 2003-9-4 12:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
emp1表結構與emp相同﹐只是資料多一點

1.
以sysdba:

SQL> grant query rewrite to scott;

順利授權.


SQL> grant create any index to scott;

順利授權.




2.

以scott進入

SQL> alter session set query_rewrite_enabled=true;

已更改階段作業.

SQL> alter session set query_rewrite_integrity=trusted;

已更改階段作業.


SQL> create index I_JOB_EMP1 on EMP1(INSTR(JOB,'AG'));

已建立索引.

SQL> analyze table emp1 compute statistics;

已分析表格.

SQL> set autotrace traceonly explain
SQL> select empno,ename,job
  2  from emp1
  3  where instr(job,'AG')<>0;

執行計畫
----------------------------------------------------------                     
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=88 Bytes=1320         
          )                                                                     
                                                                                
   1    0   TABLE ACCESS (FULL) OF 'EMP1' (Cost=2 Card=88 Bytes=1320)           



SQL> spool off
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
2#
发表于 2003-9-4 12:34 | 只看该作者

where instr(job,'AG') > 0

这样呢?

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2006-01-24 14:18:52生肖徽章2007版:鸡
日期:2009-06-05 16:44:33生肖徽章2007版:牛
日期:2009-05-19 17:07:16生肖徽章2007版:虎
日期:2009-05-08 15:23:04生肖徽章2007版:鸡
日期:2009-04-13 09:31:30生肖徽章2007版:龙
日期:2009-04-09 09:01:52生肖徽章2007版:龙
日期:2009-03-03 13:16:23生肖徽章2007版:龙
日期:2009-02-12 09:46:51生肖徽章2007版:马
日期:2009-01-12 12:30:20生肖徽章2007版:猴
日期:2008-12-02 13:43:41
3#
 楼主| 发表于 2003-9-4 12:46 | 只看该作者
剛試了下﹐也不行

使用道具 举报

回复
论坛徽章:
314
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
4#
发表于 2003-9-4 12:54 | 只看该作者
再分析那个索引,再试试

也可能是该表的数据量太少,不需要索引!

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2006-01-24 14:18:52生肖徽章2007版:鸡
日期:2009-06-05 16:44:33生肖徽章2007版:牛
日期:2009-05-19 17:07:16生肖徽章2007版:虎
日期:2009-05-08 15:23:04生肖徽章2007版:鸡
日期:2009-04-13 09:31:30生肖徽章2007版:龙
日期:2009-04-09 09:01:52生肖徽章2007版:龙
日期:2009-03-03 13:16:23生肖徽章2007版:龙
日期:2009-02-12 09:46:51生肖徽章2007版:马
日期:2009-01-12 12:30:20生肖徽章2007版:猴
日期:2008-12-02 13:43:41
5#
 楼主| 发表于 2003-9-4 13:00 | 只看该作者
強制使用索引﹐才可以﹐但是那個條件如果是<>0,又不用索引了﹐
現在怎么辦呢﹐我要的就是where instr(job,'AG')<>0, 而不是>0

SQL> ed;
已將 檔案 afiedt.buf 寫入

  1   select /*+index(emp1 i_job_emp1)*/empno,ename,job
  2   from emp1
  3*  where instr(job,'AG')>0
SQL> /

執行計畫
----------------------------------------------------------                     
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=88 Bytes=1320         
          )                                                                     
                                                                                
   1    0   TABLE ACCESS (BY INDEX ROWID) OF 'EMP1' (Cost=3 Card=88 By         
          tes=1320)                                                            
                                                                                
   2    1     INDEX (RANGE SCAN) OF 'I_JOB_EMP1' (NON-UNIQUE) (Cost=1           
          Card=88)

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2006-01-24 14:18:52生肖徽章2007版:鸡
日期:2009-06-05 16:44:33生肖徽章2007版:牛
日期:2009-05-19 17:07:16生肖徽章2007版:虎
日期:2009-05-08 15:23:04生肖徽章2007版:鸡
日期:2009-04-13 09:31:30生肖徽章2007版:龙
日期:2009-04-09 09:01:52生肖徽章2007版:龙
日期:2009-03-03 13:16:23生肖徽章2007版:龙
日期:2009-02-12 09:46:51生肖徽章2007版:马
日期:2009-01-12 12:30:20生肖徽章2007版:猴
日期:2008-12-02 13:43:41
6#
 楼主| 发表于 2003-9-4 13:01 | 只看该作者
<>0的時候﹕



SQL>  select /*+index(emp1 i_job_emp1)*/empno,ename,job
  2   from emp1
  3   where instr(job,'AG')<>0;

執行計畫
----------------------------------------------------------                     
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=88 Bytes=1320         
          )                                                                     
                                                                                
   1    0   TABLE ACCESS (FULL) OF 'EMP1' (Cost=2 Card=88 Bytes=1320)

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
7#
发表于 2003-9-4 13:05 | 只看该作者

这个字段是不是  not null ?
alter table emp1 modify(job not null);
再分析

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
8#
发表于 2003-9-4 13:07 | 只看该作者

where instr(job,'AG')<>0

instr(job,'AG')<> 0    跟  instr(job,'AG')  >  0  是一个意思!  不是吗?

使用道具 举报

回复
论坛徽章:
17
授权会员
日期:2006-01-24 14:18:52生肖徽章2007版:鸡
日期:2009-06-05 16:44:33生肖徽章2007版:牛
日期:2009-05-19 17:07:16生肖徽章2007版:虎
日期:2009-05-08 15:23:04生肖徽章2007版:鸡
日期:2009-04-13 09:31:30生肖徽章2007版:龙
日期:2009-04-09 09:01:52生肖徽章2007版:龙
日期:2009-03-03 13:16:23生肖徽章2007版:龙
日期:2009-02-12 09:46:51生肖徽章2007版:马
日期:2009-01-12 12:30:20生肖徽章2007版:猴
日期:2008-12-02 13:43:41
9#
 楼主| 发表于 2003-9-4 13:12 | 只看该作者
哦﹐是了
不過為什么<>0不用到索引呢

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
10#
发表于 2003-9-4 13:24 | 只看该作者

en

有点怀疑这个函数是不是不可以……

使用道具 举报

回复

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

本版积分规则 发表回复

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