索引

一般来讲有索引,会使查询变快,但有时候,有索引也不会快,也不会走索引

索引记录了rowid,以及值,根据rowid可以直接找到数据文件的位置

B树索引结构使根节点到每一个叶子节点的路径都是相等的

索引是有序的,在创建的时候就是有序的

索引创建时,在第一个块内存放列值和rowid,当第一个块存满了,就新增一个块存列值和rowid,同时新增一个管理这两个叶子块的分支块,分支块内存放叶子块的rowid和叶子块的数值范围,当第二个叶子块满了,会增加第三个叶子块,同时在分支块内再增加一条数据,当增加了很多叶子块,同时在分支块内增加了很多数据以后分支块也满了,会再新增一个分支块,同时新增一个根块,用来管理分支块,根块存放的内容为分支块的rowid和数值范围

索引扫描分为:索引唯一扫描,索引范围扫描,索引全扫描,索引快速全扫描,索引跳跃扫描

聚簇因子:聚簇因子是索引非常重要的一个参数,聚簇因子越大,说明这个索引越不好,越小说明索引越好

聚簇因子算法:相邻两个数据是不是在一个数据块里,不是就加一不是就加一,所以数据都在一个块里的索引是非常好的,比如RB_ACCT里的INTERNAL_KEY就是有序存的,INTERNAL_KEY上的索引就是非常好的,CLIENT_NO的就比较差了

回表:假如索引只建在了INTERNAL_KEY上面,你SELECT INTERNAL_KEY FROM FSD.RB_ACCT WHERE INTERNAL_KEY = 啥啥 了,那就不用回表,因为索引里面记录了INTERNAL_KEY的键值,但是假如你SELECT INTERNAL_KEY,CLIENT_NO FROM FSD.RB_ACCT WHERE INTERNAL_KEY = 啥啥,索引里面只记录了INTERNAL_KEY,没有CLIENT_NO,所以你查询的时候,是需要先拿到索引里面这一条数据的rowid,然后根据rowid找到这个数据在数据块里面的位置,然后再回表,拿到CLIENT_NO,但是假如你索引建的时候,就建的复合索引,直接建在了INTERNAL_KEY和CLIENT_NO上面,那就不用回表,因为索引里面存了键值

位图索引:缺点明显,容易造成锁表,优点明显,and, or的时候很快,条件很苛刻,要求索引字段更新少甚至不更新,并且值要尽量少。综合起来:尽量不要用就好了

解释:为什么锁表?因为位图索引记录的是1,0这种,有还是没有,新增一条数据,会锁定整个表,或者整个索引,来更新索引,默认非online,锁表,会使业务失败,online,锁索引,不会使业务失败,但是就比较慢

为什么and or很快?

不用排序,占的空间也小,就是有或者没有,当然快

为什么尽量不要用?

因为不合适并发,假如两个insert,一个没提交,另一个就只能等,就很慢,还容易锁

函数索引:留坑

直方图:留坑

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值