为什么我建的索引sql语句不用?

zqx1204 2004-10-26 03:41:22
为什么下述语句我的索引用不上?

SELECT a.C_DPT_CDE,
b.C_PLY_NO
FROM t_sap_skdat_hist a, t_fin_plyedr_coldue b
WHERE a.C_FROM_KEY = b.c_rcpt_no

其中我在表t_sap_skdat_hist表中对字段c_from_key建立了一个不唯一索引,在表t_fin_plyedr_coldue 表对字段c_rcpt_no建立了一个不唯一索引。可是在查询的时候它还是对上述两个表进行全表扫描,上述两个索引都是建的单列索引.
再还有我想问问复合索引和单列索引能不能进行关联,如果关联是不是索引失效!
请各位高手解答!
...全文
136 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
  • 打赏
  • 举报
回复
你这条语句的查许记录会有多少条啊?如果结果集大于表的“80%”的记录数,oracle就不采用索引查询了!
zqx1204 2004-10-27
  • 打赏
  • 举报
回复
上述两个表的数据都已经上了百万条记录了。要不然我也不会管我的sql语句会不会用索引了。
godzj 2004-10-27
  • 打赏
  • 举报
回复
你两张表里数据量是多少?如果太少,是不会用索引的
zqx1204 2004-10-26
  • 打赏
  • 举报
回复
你的意思是不是加上那两个索引,可是加上那两个索引还是会有问题,它还是不使用索引,请问如何加入hint来提示sql语句采用索引.
zmgowin 2004-10-26
  • 打赏
  • 举报
回复
如果说两个表都进行了全表扫描可能性不太大
执行show parameter optimizer看看参数的设置
加入hint可以提示sql采用索引,例如:
SELECT /*+index(index_name1,index_name2)*/a.C_DPT_CDE,
b.C_PLY_NO
FROM t_sap_skdat_hist a, t_fin_plyedr_coldue b
WHERE a.C_FROM_KEY = b.c_rcpt_no
索引列可以进行关联,一般情况下不会使索引失效
在8及以下版本使用复合索引时需从符合索引的第一列开始使用,如果直接使用后面的列,索引不会生效,9中对索引加入了自动跳转功能,不受这个限制
相关推荐
发帖
Oracle 高级技术

3472

社区成员

Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
帖子事件
创建了帖子
2004-10-26 03:41
社区公告
暂无公告