复合索引与单独索引优先级,以及rebuild索引的存储过程

bisal(Chen Liu)
领域专家: 数据库技术领域
2009-11-26 05:00:59
有两个select:
select * from t where a="a" and b="b" and c="c"

select * from t where a="a" and b="b" and d="d" and e="e"

请问这种情况下,如果建索引的话,
1、是对a,b,c,d,e建五个单独索引?
2、还是对a,b,c和a,b,c,d,e建立两个复合索引?
3、还是对a和b建立一个复合索引?

在存在单独索引与复合索引的情况下,是否先按单独索引来查询?

另外,还有一个问题:
可否提供一个例子:
定期(例如隔两周的周二晚上十点),rebuild索引,这样的一个存储过程?

谢谢指点!
...全文
225 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bisal(Chen Liu) 2009-11-27
  • 打赏
  • 举报
回复
如果是10万以内的数据,索引建与不建就没有太大的影响吧?

另外,如果建立所以后,这个表会有频繁的update和insert操作,那么索引会影响其效率?如果定期rebuild索引是不是会好些?
hailang1118 2009-11-26
  • 打赏
  • 举报
回复
虽然不知道你的Oracle版本是多少,但是《2、还是对a,b,c和a,b,c,d,e建立两个复合索引? 》
采用这种方法最好。
第2个问题,估计你想定期整理索引吧。最好采用删除重建这种方法。
bisal(Chen Liu) 2009-11-26
  • 打赏
  • 举报
回复
为什么不是:
还是对a和b建立一个复合索引?
这样对两个select中where字段的交集建立复合索引?
另外,如果同时存在复合索引和单独索引,先使用哪个?谢谢!
ojuju10 2009-11-26
  • 打赏
  • 举报
回复
定点执行,需要将这个过程加入到作业中执行
ojuju10 2009-11-26
  • 打赏
  • 举报
回复
2、还是对a,b,c和a,b,c,d,e建立两个复合索引?

create or replace procedure rebuild_index
as
indName varchar2(100);
cursor cur is select index_name from user_indexes;
begin
open cur ;
loop
fetch cur into indName;
execute immediate 'alter index '||indName||' rebuild';
exit when cur%NOTFOUND;
end loop;

end;

3,496

社区成员

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

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