创建索引

http://xiaobo.iteye.com/?page=2


-- Create/Recreate indexes
create index U2523D02BA72E4C7c on XTGLDX5102 (DXDM1, DXID)
tablespace FMIS0002
pctfree 10
initrans 2
maxtrans 111
storage
(
initial 64K
minextents 1
maxextents unlimited
);
什么时候加索引, 如何加?
最经典的说法: 数据库慢了, 加索引. 加索引就快了吗?它可能使数据库更慢! 再复杂点,对同一字段, 加bitmap index可能快, 加成b-tree就可能更慢.
我觉得什么时候加和如何加应该一起考虑的, 以整体性能的变化为判断依据, 某种方式的索引, 加在某个字段上能够引起整体性能变好时加. 加索引没有绝对化的公式, 有的话数据库就自己替你加了. 加索引是一个尝试-->失败-->再尝试的过程, 直至达到预期的目标(优化前要先定下目标,不过这目标可能永远达不到).DBA完成这一过程所需的时间取决于经验.

加索引的步骤 :
1.提取一条SQL作为关键SQL, 尝试加索引(组)以提升性能
2.提取数条关键SQL作为关键SQL组 , 验证1得到的索引(组)对关键SQL组的性能影响(Plan 变化), 正面进行3, 负面返回1
3.扩展关键SQL到全体SQL, 验证1得到的索引(组)对全体SQL的性能影响(Plan 变化), 正面进行4, 负面返回1
4.纪录该索引(组)和它的性能, 不满意或资源足够返回1, 否则进行5
5.对得到的一批索引(组)进行比较, 选取性能最好的.

1可能永远到不了2或5,这时候要进行调整.

加索引要有索引组的概念, 几个索引之间会互相影响的.



简单开个头
建立索引(BTree)首要条件,表记录不能太小(尤其是没有join的表):
1:记录的选择性比较高(不同值不是太少)
2:做表连接的字段
3:经常位于where条件中的字段
……
关于索引可能带来不良影响:
在对大表进行较多记录的范围查询的时候
3个因素会影响数据缓冲区:
(关于2,我实在忘了出处了,sorry。大家可探讨。这关系到缓冲区数据块高低端和级别问题)

1:通过ROWID(索引)读出来的数据,将会挂在数据缓冲区高端,也就是将比较长的时间保持于数据缓冲区,如果重复利用机会小,则将可能造成性能问题
2:由于数据缓冲区的数据替换策略并不是严格的将整个对象替换出去
在压力比较大的情况下,它采取的是压缩各对象数据,换句话说,很可能存在这么一种情况,由于某个对象数据的进入,假设同时换出了5个对象的10%的数据,而以后正好又查询需要用这5个对象的被换出部分数据,则……
3: 索引本身也会占用sga,当索引大到一定程度的时候也需要考虑这个问题

当然,oracle采取这种策略也是有它的道理的
上面说的这些情况,毕竟不是常见的,只是一种可能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值