楼主: mustanglala

请帮忙看看 为何不使用index

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2008-4-9 13:20 | 只看该作者
select * from  v$version

Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production
PL/SQL Release 9.2.0.8.0 - Production
"CORE        9.2.0.8.0        Production"
TNS for 32-bit Windows: Version 9.2.0.8.0 - Production
NLSRTL Version 9.2.0.8.0 - Production

使用道具 举报

回复
论坛徽章:
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
12#
发表于 2008-4-9 13:21 | 只看该作者
CLUSTERING_FACTOR        4203827

使用道具 举报

回复
论坛徽章:
5
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53奥运会纪念徽章:羽毛球
日期:2008-06-23 12:00:05奥运会纪念徽章:柔道
日期:2008-07-04 09:42:36奥运会纪念徽章:皮划艇激流回旋
日期:2008-08-12 14:50:402010新春纪念徽章
日期:2010-03-01 11:19:07
13#
发表于 2008-4-9 13:35 | 只看该作者
TABLE ACCESS FULL        SFISM4        H_SN_DETAIL_T        15204        1071937        211171589
cost:15204

TABLE ACCESS BY INDEX ROWID        SFISM4        H_SN_DETAIL_T        805099        1071937        211171589
  INDEX RANGE SCAN        SFISM4        H117_TIME        9366        1071937
cost:805099

就当前给出的执行计划来看, 全表扫描的成本是15204, 而索引范围扫描的总成本是805099, cbo选择前者是正确的.
分析一下table(r_sn_detail_t), index(h117_time), column(in_station_time)的统计信息吧.

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2008-4-9 13:45 | 只看该作者
TKs  up 2

那就是说CLUSTERING_FACTOR 更接近 Rows_num 意味着按该索引存取的效率太低, cbo 就自动choose table access full ?

那表的数据是按该表上创建的第一个索引来组织存储的吗?
复合索引的情况下存取效率会好么?
又或者该单列索引重建后 存取的效率就会高呢?
  
现在是Job time我怕收集统计信息会影响生产,实际上我自己并没有做过统计

使用道具 举报

回复
论坛徽章:
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
15#
发表于 2008-4-9 14:11 | 只看该作者
如果你觉得强制走索引是比全表慢,说明oracle走的是对的,这情况你收集统计信息oracle应该还是选全表
如果你觉得强制走索引是比全表快,收集统计信息就有好处,收集后oracle可能就走索引了

不过,那也太长时间没收集统计信息了

使用道具 举报

回复
论坛徽章:
5
生肖徽章2007版:鸡
日期:2008-01-02 17:35:53奥运会纪念徽章:羽毛球
日期:2008-06-23 12:00:05奥运会纪念徽章:柔道
日期:2008-07-04 09:42:36奥运会纪念徽章:皮划艇激流回旋
日期:2008-08-12 14:50:402010新春纪念徽章
日期:2010-03-01 11:19:07
16#
发表于 2008-4-9 14:18 | 只看该作者
原帖由 mustanglala 于 2008-4-9 13:45 发表
TKs  up 2

那就是说CLUSTERING_FACTOR 更接近 Rows_num 意味着按该索引存取的效率太低, cbo 就自动choose table access full ?

那表的数据是按该表上创建的第一个索引来组织存储的吗?
复合索引的情况下存取效率会好么?
又或者该单列索引重建后 存取的效率就会高呢?
  
现在是Job time我怕收集统计信息会影响生产,实际上我自己并没有做过统计



1.
Q:那表的数据是按该表上创建的第一个索引来组织存储的吗?
A:不是.这是一个严重的误区, 简单的说, 表中的数据是无序的. IOT(索引组织表)除外.

2.
Q:复合索引的情况下存取效率会好么?
A:复合索引跟这个SQL好像关系不大. 这么说吧, 完全索引存取效率会很好.
所谓完全索引就是指, 一个索引包含了一个SQL中所访问的所有字段, 且以SQL中的谓词字段为索引的首字段.
这种索引存在的话, 对应的SQL只需要做索引范围扫描就可以得到结果, 而不需要再去访问表了, 对应SQL的性能可以提高很多.

但是这种索引有局限性, 首先它只针对特定SQL有特效, 但是它的存在很可能导致其他不该使用该索引的SQL走错索引, 而导致数据库崩溃.所以慎用.

3.
Q:又或者该单列索引重建后 存取的效率就会高呢?
A:索引重建对clustering_factor没有任何影响.
这也是一个严重的误区, 因为clustering_factor反应的是表中的数据相对索引排列的混乱程度.
要改变这个参数只有一个办法:

create table t_1 as select * from t order by xxx,xxx;

就是按索引的顺序重新组织表中的数据, 不过相信没有人会这么去做的.
另一个办法就是用IOT(索引组织表), 原因参见第一个问题的回答.

使用道具 举报

回复
论坛徽章:
0
17#
发表于 2008-4-9 14:29 | 只看该作者
基于cbo的查询并不是设置了索引就按照索引去走
oracle会自动计算查询成本的
也许oracle这是觉得fts车巡的成本更低
最好能够贴出你的索引情况和表的数据量
可以调整OPTIMIZER_INDEX_COST_ADJ参数一定程度上控制查询方式

使用道具 举报

回复
论坛徽章:
131
2006年度最佳技术回答
日期:2007-01-24 12:58:48福特
日期:2013-10-24 13:57:422014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11马上有车
日期: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:142013年新春福章
日期:2013-02-25 14:51:24
18#
发表于 2008-4-9 14:55 | 只看该作者
事情很简单,估计是统计信息不够新

使用道具 举报

回复
论坛徽章:
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
19#
发表于 2008-4-9 15:08 | 只看该作者
楼主的写法有错误,即便是一个表,也必须写表名或别名.因为ORACLE会认为这个索引是表名,而实际上又找不到这个表.

使用道具 举报

回复
论坛徽章:
0
20#
 楼主| 发表于 2008-4-9 15:30 | 只看该作者
谢谢 up 5
   多谢指点,然而各位的意思是 它只能是这样慢啦?我只能忍受如此之慢的语句了
  我都怀疑回滚段耗光之前能不能等到数据~·
    害我一整天整不出程序来 郁闷~~~

rollingpig  事情很简单,估计是统计信息不够新

重新统计会提高速度么?

使用道具 举报

回复

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

本版积分规则 发表回复

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