楼主: jimmylee

[精华] 为什么加上索引速度奇慢无比?

[复制链接]
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
31#
 楼主| 发表于 2002-7-31 20:51 | 只看该作者

Re: 你注意他的这个地方

最初由 biti_rainy 发布
[B]select rownum rno,rowid /*+ INDEX(cstmonilog index2 ) */ rid from

还要注意在这一层的where条件中的所有字段都包含在索引中!

这是什么意思,表示所有字段和rowid都从索引里面来,而不用进行表扫描
通过索引确定了你要选取的记录的位置
然后再通过rowid去扫描表

因索引中只包含部分字段,内层使用的内存就少了

因为进行表扫描的时候不管你选取所有字段还是一个字段,都是把所有列读进内存的! [/B]


但是我测试的结果,用index1(moni_time)的结果比index2更快。

使用道具 举报

回复
论坛徽章:
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
32#
发表于 2002-7-31 20:58 | 只看该作者

我只是跟你说理论上怎么来解释这些现象

但事实上
我并没有说他是最好的
因为确实存在一个问题我无法确信:
那就是你order by  的是时间,但where中却没有时间字段
这样让我在考虑这个问题的时候陷入两难境地

如果是我处理这个我问题,我会在索引上做各种组合来测试以确定各种方案中最好的
因为如果排序字段上没有索引,那也将是一件很痛苦的事情
并且我现在不确信能否很好的解决排序与where中的索引字段的矛盾

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
33#
 楼主| 发表于 2002-7-31 21:00 | 只看该作者
我刚刚测试的结果,lwxian的语句从99万记录中选取35条的速度是1.33秒。下午我执行时没有这么快,可能是数据库的性能的影响。lwxian 的语句确实使用的索引,有没有索引影响非常之大。我的语句加不加索引结果都一样。
另外我数据库版本8.1.7 for AIX,优化器方式choose。我在sqlplus设定set autotrace on 后并产生执行计划后,是否优化器采用cbo,造成对速度的影响?

使用道具 举报

回复
论坛徽章:
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
34#
发表于 2002-7-31 21:01 | 只看该作者

需要补充一点的是

因为较早版本的一个查询中,在一个表中,oracle将只选择一个索引

不知道在9i中由于跳跃式扫描的索引的特性的存在
会否解决你的这个问题

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
35#
 楼主| 发表于 2002-7-31 21:09 | 只看该作者

Re: 我只是跟你说理论上怎么来解释这些现象

最初由 biti_rainy 发布
[B]但事实上
我并没有说他是最好的
因为确实存在一个问题我无法确信:
那就是你order by  的是时间,但where中却没有时间字段
这样让我在考虑这个问题的时候陷入两难境地

如果是我处理这个我问题,我会在索引上做各种组合来测试以确定各种方案中最好的
因为如果排序字段上没有索引,那也将是一件很痛苦的事情
并且我现在不确信能否很好的解决排序与where中的索引字段的矛盾 [/B]

非常感谢你的回答,在这种情况下建什么样的索引确实是非常为难的事情。你认为可能会用到那些字段的索引?
另外需要说明的是lwxian 的算法的速度与搜索行(rownum)的区间位置关系较大,如行数靠前速度非常快,如果行号靠后则速度明显下降,响应时间基本与行的位置成正比,不知道怎么改进。但我认为lwxian的算法确实是比较好的算法之一,尽管看起来怎么都不象是好的算法。

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
36#
 楼主| 发表于 2002-7-31 21:11 | 只看该作者

Re: 需要补充一点的是

最初由 biti_rainy 发布
[B]因为一个查询中,在一个表中,oracle将只选择一个索引

不知道在9i中由于跳跃式扫描的索引的特性的存在
会否解决你的这个问题 [/B]

对于钳套查询不能有一个以上的索引吗?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
37#
发表于 2002-7-31 21:25 | 只看该作者
按你目前的数据分布情况,同一条件的几百万,这样每一查询返回数据量太大!
要提高速度,建议在表结构设计上下功夫!

刚才我那条SQL也有一些问题,就是分页越到后面越慢!因为越到后面,要求读取的
数据越多!

使用道具 举报

回复
论坛徽章:
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
38#
发表于 2002-7-31 21:27 | 只看该作者

给你一点建议:

把你的这个查询拆开

利用他的这个办法把 rowid  的集合(这个集合可以顺便把索引字段一起取出来)取出来,比如30条
不使用in
1:
然后用rowid做条件循环30次取30条记录
2:或者循环,利用取出的索引字段然后循环取30条记录,根据索引条件

或者:利用这个集合做驱动表跟表做表连接(不使用in)

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
39#
发表于 2002-7-31 21:35 | 只看该作者

Re: Re: 你注意他的这个地方

最初由 jimmylee 发布
[B]

但是我测试的结果,用index1(moni_time)的结果比index2更快。 [/B]



因为你目前r的where条件相当于没有,所有数据都是相同的!
所有第二个索引中前面三个字段等于没有用处,白白占用多余空间!

使用道具 举报

回复
论坛徽章:
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
40#
发表于 2002-8-1 08:34 | 只看该作者

按照我上面说的拆开查询的建议

你使用游标试一下

使用道具 举报

回复

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

本版积分规则 发表回复

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