Oracle复合索引建立的问题

bisal(Chen Liu)
博客专家认证
2012-05-02 04:26:53
Oracle一个表TABLE有A,B,C,D,E字段,有个SQL,用到了WHERE A=:a and B=:b and C=:c and D=:d,还有一个SQL用到了WHERE A=:a and B=:b and C=:c and D=:d and E=:e,如果只建立一个(A,B,C,D)的复合索引,我看到执行计划是:
1 - filter("TABLE"."E"='02')
2 - access("TABLE"."A"='1' AND "TABLE"."B"='1309' AND
"TABLE"."C"='01SEP10' AND "TABLE"."D"='D')

如果建立(A,B,C,D,E)的复合索引,则执行计划:
2 - access("TABLE"."A"='1' AND "TABLE"."B"='1309' AND
"TABLE"."C"='01SEP10' AND "TABLE"."D"='D' AND "TABLE"."E"='e')

问题:
1、如果仅建立(A,B,C,D,E)的索引,那仅使用A,B,C,D四个做WHERE条件的SQL也可以使用索引?
2、如果仅建立(A,B,C,D)的索引,那使用A,B,C,D,E五个做WHERE条件的SQL执行计划有1 - filter和2 - access,是否用索引了呢?
3、没必要建立(A,B,C,D,E)和(A,B,C,D)两个复合索引?

注:这个表的DDL操作:INSERT以及每天夜维执行一次DELETE操作。

谢谢!
...全文
425 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
billlyh 2012-05-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
解答:
1可以
2是
3如果效率要求特别高才有必要,不建议这样,如果十分必要建立ABCDE索引
[/Quote]
学习
kerisyml 2012-05-03
  • 打赏
  • 举报
回复
建立(A,B,C,D,E)这样的索引才会使你的WHERE A=:a and B=:b and C=:c and D=:d and E=:e,语句进行最优化
bisal(Chen Liu) 2012-05-03
  • 打赏
  • 举报
回复
那对于这种情况,建立(A,B,C,D,E)的索引比建立(A,B,C,D)的索引更有效了?

[Quote=引用 2 楼 的回复:]

解答:
1可以
2是
3如果效率要求特别高才有必要,不建议这样,如果十分必要建立ABCDE索引
[/Quote]
iqlife 2012-05-02
  • 打赏
  • 举报
回复
解答:
1可以
2是
3如果效率要求特别高才有必要,不建议这样,如果十分必要建立ABCDE索引
hupeng213 2012-05-02
  • 打赏
  • 举报
回复
最简单的操作就是每个字段建立一个索引

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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