查看: 2174|回复: 7

请教--数据库优化-有关全表扫描

[复制链接]
论坛徽章:
1
2011新春纪念徽章
日期:2011-02-18 11:43:34
发表于 2010-11-9 17:01 | 显示全部楼层 |阅读模式
今天碰到一个奇怪的现象:
有个表,在列上有索引,但是查询的时候就是不用这个索引。
select  *  FROM T_D  WHERE SJSTATE=2  
开始认为是统计信息的问题,我试过重新分析、重建索引,设置rebuild表,这个查询依然是全表扫描!

执行了下面的包,也不行!还是全表扫描!
exec dbms_stats.gather_schema_stats(
ownname          => 'SCOTT',
options          => 'GATHER AUTO',
estimate_percent => dbms_stats.auto_sample_size,
method_opt       => 'for all columns size repeat',
degree           => 15
);


但是如果我直接创建个表 CREATE TABLE T_D1 (SELECT * FROM T_D),再加索引。
select  *  FROM T_D1  WHERE SJSTATE=2
这时表T_D1正确使用了索引

太奇怪了,何解?
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2010-11-9 17:20 | 显示全部楼层
因为WHERE SJSTATE=2行数太多了,直接创建不收集统计信息,走RBO当然用索引了

使用道具 举报

回复
论坛徽章:
59
狮子座
日期:2016-03-26 13:35:402013年新春福章
日期:2013-02-25 14:51:24双黄蛋
日期:2013-02-25 11:06:15ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20灰彻蛋
日期:2012-04-25 13:19:33紫蛋头
日期:2012-03-14 11:16:09最佳人气徽章
日期:2012-03-13 17:39:18玉石琵琶
日期:2012-02-21 15:04:38鲜花蛋
日期:2011-11-30 14:13:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
发表于 2010-11-9 17:28 | 显示全部楼层
did you compare the table size between T_D and new one T_D1?

使用道具 举报

回复
论坛徽章:
1
2011新春纪念徽章
日期:2011-02-18 11:43:34
 楼主| 发表于 2010-11-9 17:29 | 显示全部楼层
我试过了,直接对表和索引分析后,肯定是会生成统计信息的,即使最新的统计信息没用,还是全表扫描。
RBO没试过。

使用道具 举报

回复
论坛徽章:
15
生肖徽章2007版:羊
日期:2009-02-10 14:52:362013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2012-12-17 17:16:242011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-30 14:20:16ITPUB9周年纪念徽章
日期:2010-10-08 09:28:522010年世界杯参赛球队:尼日利亚
日期:2010-07-15 14:53:432010年世界杯参赛球队:美国
日期:2010-04-29 22:55:002010新春纪念徽章
日期:2010-03-01 11:08:27生肖徽章2007版:龙
日期:2009-07-30 10:45:52
发表于 2010-11-9 17:32 | 显示全部楼层
建错索引了吧,加提示走不走索引?

使用道具 举报

回复
论坛徽章:
1
2011新春纪念徽章
日期:2011-02-18 11:43:34
 楼主| 发表于 2010-11-9 17:43 | 显示全部楼层
加提示试过了 select /*+ index(T_D i_t001) */ * T_D  WHERE SJSTATE=2  ;没用还是全表扫描
索引名捕会错的

使用道具 举报

回复
论坛徽章:
1
2011新春纪念徽章
日期:2011-02-18 11:43:34
 楼主| 发表于 2010-11-9 21:05 | 显示全部楼层
找到答案!
Look into the analyze command -- in particular:

analyze table t
compute statistics
for TABLE
for all indexes
for all indexed columns SIZE <N>;

you are probably seeing that the default histrogram bucket size is not appropriate for
you.  Play with different values of N and see what happens with your query.

大概是因为在TOAD里面analyze的N是默认1,改成2执行下立马OK!看来还统计信息的问题,由于执行产生的统计信息不足以CBO确认以索引优化查询才引起这个问题

使用道具 举报

回复
招聘 : 数据库管理员
认证徽章
论坛徽章:
20
祖国60周年纪念徽章
日期:2009-10-09 08:28:00数据库板块每日发贴之星
日期:2011-02-20 01:01:01ITPUB季度 技术新星
日期:2011-04-02 10:31:09ITPUB十周年纪念徽章
日期:2011-11-01 16:24:042012新春纪念徽章
日期:2012-01-04 11:54:26玉石琵琶
日期:2012-02-21 15:04:38最佳人气徽章
日期:2012-03-13 17:39:18ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:192013年新春福章
日期:2013-02-25 14:51:242011新春纪念徽章
日期:2011-02-18 11:43:33
发表于 2010-11-10 08:50 | 显示全部楼层
直方图啊、、、、、、

使用道具 举报

回复

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

本版积分规则 发表回复

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