楼主: mypengchen2000

[精华] 存储过程的效率问题!!(今晚在线等)

[复制链接]
论坛徽章:
0
81#
发表于 2003-7-3 11:14 | 只看该作者
前提是该查询语句只是简单的SELECT而已,
例如:SELECT USER_ID FROM USER_A.TAB_USER
(在USER_A用户下的TAB_USER表中建有USER_ID字段的索引)
这样的查询语句也能用上索引进行扫描吗?

使用道具 举报

回复
论坛徽章:
0
82#
发表于 2003-7-3 11:59 | 只看该作者
楼主所说的问题很有可能就是索引的原因呢!

使用道具 举报

回复
论坛徽章:
0
83#
 楼主| 发表于 2003-7-3 13:23 | 只看该作者
问题终于解决了,谢谢各位的热心帮助!
原来是这样的:在数据库数据文件被删之前,键有一个snapshot,用来刷新几张表的数据,在这个snapshot上有10个左右的索引;但数据库数据文件被删之后,不知他们怎么处理的,将这个snapshot变成了一个表(数据和snapshot的一样),但这个表很奇怪,对这个表的操作中,不该用索引的它都要用上索引(通过执行计划看到的),导致效率非常的低下;今天有重新键了那个snapshot,并加上了索引,效率马回到和以前一样了!!
一句话:就是使用了错误的索引,导致效率低下n倍,甚至跑不出数据;

但是,还有个问题,为什么表上会很错误的用上索引了???
比如a表的custid上有索引,那么select custid form a group by custid应该不会用上索引的,为什么会用上索引?甚至这样,select custid+0 form a group by custid+0 也会用上custid的索引,为什么?
(我是在执行计划里看到它确实用了索引的)请各位遇到过这种类似问题的朋友指教!!

使用道具 举报

回复
论坛徽章:
0
84#
发表于 2003-7-3 13:33 | 只看该作者
应该不是用来了group by的原因,而是和我上面说的一样的情况!是某用户下的表在进行查询时都被强制性地用上索引!这个问题困惑我好久啊!   那位大侠碰到过类似情况请不吝赐教!  索引啊索引,都是索引惹的祸!

使用道具 举报

回复
论坛徽章:
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
85#
发表于 2003-7-3 13:40 | 只看该作者

所以说
不熟悉你的系统和应用本身
又如何去调整

这个问题可以归结为SQL优化范畴,执行计划发生了变化

虽然早就指出
1: 检查代码 和 相关对象,包括索引状况、存储参数设置、目前数据状况等
2: trace session
3:检查 动态性能视图
4:做statspack

但由于不熟悉,则只能泛泛的给建议。优化是不能脱离应用的

使用道具 举报

回复
论坛徽章:
0
86#
 楼主| 发表于 2003-7-3 14:23 | 只看该作者
对,确实只有熟悉系统和应用本身再加上平时处理问题的经验才发现并解决了问题,很谢谢你的建议,问题确实也存在于如你建议的地方!!

但在这个问题之上,我发现的这个奇怪问题,不知是什么原因呢???
简单一点来说:
cust表的custid上建有索引,为什么我执行下面的语句时,用执行计划看仍然要用到索引呢??
1.select custid from cust;
2.select custid from cust group by custid;
3.select custid+0 from cust group by custid+0;
这三条语句,都用到了相同的索引,即custid上建的索引!!
大家帮忙看看,到底什么原因使得着个表有如此问题呢?????

使用道具 举报

回复
论坛徽章:
4
授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
87#
发表于 2003-7-3 16:45 | 只看该作者
基于rule 来说 上面的语句应该是不会用到索引的...


但如果是基于cost的话,那就只有天知道了.....




不对 是Oracle 知道....




-----------------------------------------------------------------------
努力中..........................................

使用道具 举报

回复
论坛徽章:
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
88#
发表于 2003-7-3 16:55 | 只看该作者

因为你选的字段都包含在索引里面

最初由 mypengchen2000 发布
[B]对,确实只有熟悉系统和应用本身再加上平时处理问题的经验才发现并解决了问题,很谢谢你的建议,问题确实也存在于如你建议的地方!!

但在这个问题之上,我发现的这个奇怪问题,不知是什么原因呢???
简单一点来说:
cust表的custid上建有索引,为什么我执行下面的语句时,用执行计划看仍然要用到索引呢??
1.select custid from cust;
2.select custid from cust group by custid;
3.select custid+0 from cust group by custid+0;
这三条语句,都用到了相同的索引,即custid上建的索引!!
大家帮忙看看,到底什么原因使得着个表有如此问题呢????? [/B]


所以即使是1和3,也选择了索引

使用道具 举报

回复
论坛徽章:
0
89#
发表于 2003-7-3 17:20 | 只看该作者
正常的表的话,1,2,3应该都不会用上索引的

使用道具 举报

回复
论坛徽章:
0
90#
 楼主| 发表于 2003-7-3 17:24 | 只看该作者
在执行计划中看是基于choose的;
因为你选的字段都包含在索引里面,所以即使是1和3,也选择了索引?
这句话不明白,按理说,1和3是不应该用到索引的啊,那究竟为什么它又使用到了索引呢??
还有,我删掉这个表,又新建了一个后,同样加上索引,又正常了,运行1,2,3都不用索引了?
为什么会这样呢?

使用道具 举报

回复

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

本版积分规则 发表回复

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