索引

1、

这是一条非常简单的查询语句,下面通过这条语句分析一下数据库在这之中做了什么,为了观察方便,下面打开追踪器。切换到sys用户

打开之后直接在sys用户中进行性能信息的查询,此时的查询除了会返回结果之外,还会返回给用户一些分析的信息


TABLE ACCESS FULL此时直接描述的是要进行全表扫描,就属于逐行扫描。而且最为关键的问题在于,如果现在emp表的数据有50W条,可能在第20920条之后就没有任何雇员记录可以满足于此条件,但是这个时候以上的语句会继续向后查询,很明显这就是一种浪费,所以此时的性能一定不可能变快。

        在这种情况下数据最好的排列就是根据树排列。

        树的排列原则:选取一个数据作为根节点,比此节点大的数据放在右子树,比节点小的数据放在左子树。这样就可以实现排序。但是现在问题是选什么数据来操作呢?本程序使用的是sal字段,所以就应该利用sal来操作索引。


这个时候就可以进行索引的创建以实现以上的操作结构。在整个的操作过程之中,如果要想创建索引,那么必须设置一个指定的字段。


通过查询分析器可以发现,此时查询不再使用全表扫描

TABLE ACCESS BY INDEX ROWID

 INDEX RANGE SCAN

此时进行查询的时候不是全部数据都查询了,而是查询了所需要的范围的内容。

虽然利用索引可以进行查询提升,但是需要明确一个问题所在,索引提升查询的关键在于:那棵索引树。那么如果说现在你的数据表之中,sal字段的内容都在重复改变的时候,那么这棵树将“杀死你”

        树的维护操作是需要花费时间的,如果数据小,那么可以在很短时间内进行树的生成。但是数据量一大,时间会花费巨大(所以如果说现在不想重复的进行树的维护,那么就必须保证数据的不可更改与唯一性,所以默认情况下会在主键约束上自动追加一个索引)

所以这个时候最好的做法是牺牲实时性。等于有两个数据库,一个数据库专门给用户负责查询使用,另外一个数据库专门给用户更新操作使用。对于查询的数据库可以在每天凌晨2-3点的时候进行统一保存或者进行统一的分析后保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值