楼主: jimmylee

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

[复制链接]
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
11#
 楼主| 发表于 2002-7-31 12:57 | 只看该作者
thanks rejoice999 for your help.
但是速度还是非常慢呀,如何解决呢?

使用道具 举报

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

你数据量有多大?

order by 是否利用了索引
你的整个查询是否合理的利用了索引
这是最关键的两个因素

可能的话
trace 一把,tkprof 看看慢在哪里

使用道具 举报

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

Re: 为什么加上索引速度奇慢无比?

最初由 jimmylee 发布
需要说明的是目前的记录的moni_area,moni_typeid,moni_flag都是相同的,就是说目前的99万条记录加不加where语句查询的记录集都是一样的(但将来可能不一定)
[/B]



这不相当于全表扫描?当然慢了,建议建立如下索引:
create index index2 on cstmonilog(moni_area,moni_typeid,moni_flag,moni_time)
)


因为你看一下你的统计:
1 sorts (disk)
前面一个是没有sorts (disk)


SQL改为:
select  rowid  rID, MONI_TIME,MONI_TYPE,MONI_APERRCODE,MONI_CONSTANT,SubStr(MONI_USERINFO,1,50) MONI_USERINFO

from cstmonilog
where rowid IN
(select rid from  (select rownum rno,rowid /*+ INDEX(cstmonilog index2 ) */ rid from cstmonilog where MONI_AREA = :MoniAreaNo and MONI_TYPEID = :MoniTypeID and MONI_FLAG = '1' and rownum <:MoniNoLast
order by MONI_TIME) where rNo >=:MoniNoFirst )
order by MONI_TIME;

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
14#
 楼主| 发表于 2002-7-31 14:01 | 只看该作者
99万条记录,order  by 确实利用了索引,但如果用row_number没有用索引,why?

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
15#
发表于 2002-7-31 14:16 | 只看该作者
影响了优化器的判断,优化器根据索引的存在选择了一条他认为好,实际上更坏的执行路径

使用道具 举报

回复
论坛徽章:
70
三菱
日期:2014-01-17 10:00:292014年世界杯参赛球队: 智利
日期:2014-06-05 11:54:32马上加薪
日期:2014-04-07 17:03:21马上有钱
日期:2014-02-25 21:39:36马上加薪
日期: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:41:11
16#
发表于 2002-7-31 14:30 | 只看该作者
-------------------------------------------------------------------
需要说明的是目前的记录的moni_area,moni_typeid,moni_flag都是相同的,就是说目前的99万条记录加不加where语句查询的记录集都是一样的(但将来可能不一定)
-------------------------------------------------------------------
这样子还有必要建索引?即便将来有不同,索引的区分度也太低。

使用道具 举报

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

Re: Re: 为什么加上索引速度奇慢无比?

最初由 lwxian 发布
[B]


这不相当于全表扫描?当然慢了,建议建立如下索引:
create index index2 on cstmonilog(moni_area,moni_typeid,moni_flag,moni_time)
)


因为你看一下你的统计:
1 sorts (disk)
前面一个是没有sorts (disk) [/B]


加上这样的索引,执行计划显示使用index2而不用index1,但速度比index1慢多了,一个是33秒,一个是167秒。看来目前只是moni_time域使用了索引。

使用道具 举报

回复
论坛徽章:
2
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33
18#
 楼主| 发表于 2002-7-31 17:45 | 只看该作者
最初由 DeepBlue 发布
[B]影响了优化器的判断,优化器根据索引的存在选择了一条他认为好,实际上更坏的执行路径 [/B]

如何解决?

使用道具 举报

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

Re: Re: Re: 为什么加上索引速度奇慢无比?

最初由 jimmylee 发布
[B]

加上这样的索引,执行计划显示使用index2而不用index1,但速度比index1慢多了,一个是33秒,一个是167秒。看来目前只是moni_time域使用了索引。 [/B]



你有用我的SQL测试吗?

使用道具 举报

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

Re: Re: Re: Re: 为什么加上索引速度奇慢无比?

最初由 lwxian 发布
[B]


你有用我的SQL测试吗? [/B]

是的,我试了一下,速度确实比以前快了不少,以前是2分多,你的做法是1分多,基本提高了一倍。但速度还是有些慢。

使用道具 举报

回复

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

本版积分规则 发表回复

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