数据库索引优化

   今天开始查找一个打印功能响应慢的问题,用jprofiler做了一个简单跟踪,发现有条SQL语句,执行时间相对较长。oracle数据库是刚导进去的,不存在碎片和行迁移、行链接、统计信息没更新的可能,这条SQL语句也不是做的全表扫描,看来可能是索引丢失或使用有问题。检查数据表索引,设了一个组合索引。拿索引和SQL语句一对比,SQL语句where字句中第一个查询列不在索引列的第一列,看来这个索引对这条SQL语句是无效的。为了证明这一点,做了索引监控:

    alter index index_name monitoring usage;

   重新做了一遍打印操作。

   select * from V$object_usage;

   查询结果为空,证明了这一点。正好,借此机会总结一下索引的使用和优化。

  1. 索引的创建是需要代价的,进行删除、更新、插入操作时同步进行索引的删除、更新、插入,会导致删除、更新、插入效率的降低,所以用不到的索引不建。不用的索引及时删除;
  2. 数据列上创建索引时,如果该列没有重复值,创建唯一单一索引,如果该列存在重复值,但和另一个或几个列组合可以确定唯一性,和这几个列一起创建组合索引,查询列中用到的第一查询列做为组合索引的第一个列;
  3. 避免出现包含共享列的重叠索引;
  4. 连接查询中要使用索引,必须使用Nested loop join,这样可以使用内表的索引;
  5. 如果where字句中的查询列存在潜在的类型转换,该列上的索引无效;
  6. 增、删、改频繁的表需要定期对表和索引进行分析,才能保证索引的有效。

              

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15011739/viewspace-414940/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15011739/viewspace-414940/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值