求一个建议:关于建索引的方案

zxwl 2005-12-04 11:35:08
where status_code = '201' and in_time > sysdate - 1
2个条件中,无论先后顺序怎么写,都只用到了status_code上的索引,而用不到in_time上的索引但是,只用status_code上的索引,速度很慢,所以不得不再建一个复合索引(status_code,in_time),这样速度可以满足要求。
【主要问题:】这样是不是浪费空间啊,感觉浪费了一倍的空间,有什么好的方案呢?
我想在不建复合索引的条件下,用上两个索引。

因为用上了in_time上的索引,速度明显提高(该生产库存放60天左右的数据)
但如果指定仅仅使用in_time上的索引,速度上还是达不到要求。


另外,我想问一下status_code的可选值只有4种,有必要建索引么?好像有印象说,大表取大量数据最好不用索引,平均取1/4的数据算大量了吧?
我单独试了一下where status_code = '201' 这个条件,
速度还不如where status_code||'' = '201'来的快
...全文
129 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxwl 2005-12-13
  • 打赏
  • 举报
回复
问题解决了,帮者有分,谢谢!
常遇道 2005-12-04
  • 打赏
  • 举报
回复
创建索引对于数据的查询是很有帮助的
但是对于数据的更新是有一定的坏处的。
条件是索引取值唯一性要高
用在where 或join中才起作用
访问数据的结果集要在2~~4%之间才是最高效的。

查看索引
select * from ic.index_name,ic.column_name,
ic.column_position col_pos,ix.uniqueness
from user_indexes ix,user_ind_columns ic
where ic_index_name=ix.index_name and ic.table_name='employees';
zxwl 2005-12-04
  • 打赏
  • 举报
回复
我现在想干掉另外一个作用不是很大的索引,
再干掉status_code上的索引--这个,原来用到status_code索引的程序,应该可以用到复合索引吧

另求第二个问题:
我想问一下status_code的可选值只有4种,有必要建索引么?好像有印象说,大表取大量数据最好不用索引,平均取1/4的数据算大量了吧?
我单独试了一下where status_code = '201' 这个条件,
速度还不如where status_code||'' = '201'来的快
zxwl 2005-12-04
  • 打赏
  • 举报
回复
hint可以选择用上两个独立索引吗?
我只会hint指示用某一个索引

位图索引,数据库是oracle9.2
默认的应该是bitmap吧?这个我不知道,请教怎么查看索引是不是bitmap那?
leborety 2005-12-04
  • 打赏
  • 举报
回复
1.试下hint

2。位图索引

17,377

社区成员

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

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