什么情况下会导致索引不起作用而使用全表扫描

goldtogo 2002-12-13 09:05:24
又发现奇怪的事情了

不同的机器上,同样的表结构和索引,一台数据库服务器起作用,另一台就是不起作用,怎么回事呀?
...全文
352 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goldtogo 2002-12-13
  • 打赏
  • 举报
回复
请大家帮我看看

/* Formatted on 2002/12/13 09:21 (RevealNet Formatter v4.4.0) */
SELECT COUNT (a.yhbh) AS yhsm
FROM jb.jb_yhk a, qx.qx_dt_yhjbsjk b
WHERE a.csdm = 14
AND a.yhbh = b.yhbh
AND a.qxdm IN (24,32,40,48,56,64,72,80,158,159,160,161,
168
)
AND a.pzrq <= LAST_DAY (TO_DATE ('2003-1-1', 'YYYY-MM-DD'))
AND a.jyzt = 1
AND b.jylx = 1
AND b.yhjb IN (2)
AND a.jjlx IN (10, 11, 12, 13, 14, 15, 16, 17, 18)

jb.jb_yhk上有一个主键yhbh(业户编号),本身就是索引对吧?
jb.jb_yhk上还有一个索引: qxdm(区县代码)

index_name Unique Column name Position
PK_JB_YHK UNIQUE yhbh 1
PK_JB_QXDM NONUNIQUE qxdm 1


qx.qx_dt_yhjbsjk 上有一个索引 yhbh

index_name Unique Column name Position
PK_QX_YHBH NONUNIQUE yhbh 1

hrb_qiuyb 2002-12-13
  • 打赏
  • 举报
回复
你的问题我刚处理过,是由optimizer_mode参数引起的,该参数的默认值为choose,即为如表有statis则查询走基于cost的方式,否则走基于rule的方式,因些你可以有以下几个解决方法。
1、简单的在init<sid>.ora中设optimizer_mode=rule,重起数据库。
2、使用analyze table table_name(索引基表) delete statistics;
3、最后一个万能办法,将表和索引drop掉,重建。
goldtogo 2002-12-13
  • 打赏
  • 举报
回复
都是单独的索引阿
wanghai 2002-12-13
  • 打赏
  • 举报
回复
复合索引只有查询条件中有第一个列的条件才启动复合索引

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧