zoukankan      html  css  js  c++  java
  • 优化Oracle库表企图的若干方法3

      泉源:天极网





    2、显式为主键列建树反向键索引

      2.1 反向键索引的道理和用途

      我们晓得Oracle会主动为表的主键列建树索引,这个默许的索引是平凡的B-Tree索引。凑合主键值是按挨次(递增或递减)加入的情况,默许的B-Tree索引并不志向。这是由于如果索引列的值具有严厉挨次时,随着数据行的拔出,索引树的层级添加很快。搜索索引发生发火的I/O读写次数和索引树的层级数成正比,也就是说,一棵具有5个层级的B-Tree索引,在最终读取到索引数据时最多能够发生发火多达5次I/O利用。因此,增添索引的层级数是索引功效调整的一个重要方法。

      如果索引列的数据以严厉的有序的方法拔出,那么B-Tree索引树将酿成一棵不合错误称的"歪树",如图 5所示:



    图 5不合错误称的B-Tree索引

      而如果索引列的数据以随机值的方法拔出,我们将得到一棵趋向对称的索引树,如图 6所示:



    图 6对称的B-Tree索引

      对照图 5和图 6,在图 5中搜索到A块需求截至5次I/O利用,而图 6仅需求3次I/O利用。

      既然索引列数据从序列中获取,其有序性无法遁藏,但在建树索引时,Oracle容许对索引列的值截至反向,即事后对列值截至比特位的反向,如1000,10001,10011,10111,1100颠末反向后的值将是0001,1001,1101,0011。显然颠末位反向处置责罚的有序数据变得对照随机了,如许所得到的索引树就对照对称,从而行进表的查询功效。

      但反向键索引也有它领域性:如果在WHERE语句中,需求对索引列的值截至领域性的搜索,如BETWEEN、<、>等,其反向键索引无法利用,此时,Oracle将执行全表扫描;只需对反向键索引列截至 <>和 = 的对照利用时,其反向键索引才会得到利用。

      2.2 反向键索引的SQL语句

      回到我们下面的例子,由于T_ORDER和T_ORDER_ITEM的主键值泉源于序列,主键值是有严厉挨次的,以是我们应该放弃默许的Oracle所供应的索引,而采用显式为主键指定一个反向键索引的方法。

      ORDER_ID为T_ORDER表的主键,主键名为PK_ORDER,我们为ORDER_ID列上建树一个反向键索引IDX_ORDER_ID,并使PK_ORDER_ID利用这个索引,其SQL语句如下:

    create table T_ORDER (
     ORDER_ID NUMBER(10) not null,
     CLIENT VARCHAR2(60),
     ADDRESS VARCHAR2(100),
     ORDER_DATE CHAR(8));
    create unique index IDX_ORDER_ID on T_ORDER ( ORDER_ID ASC) reverse;alter table T_ORDER add constraint PK_ORDER primary key (ORDER_ID) using index IDX_ORDER_ID;

      要保证创建IDX_ORDER_ID的SQL语句在创建PK_ORDER主键的SQL语句之前,由于主键需求援用到这个反向键索引。

      由于主键列的数据是独一的,所认为IDX_ORDER_ID加上unique限制,使其成为独一型的索引。

      2.3 PowerdDesigner如何利用

      1) 首先,需求为ORDER_ID列建树一个反向键索引。翻开T_ORDER的Table Properties的窗口,切换到Indexes页,新建一个名为IDX_ORDER_ID的索引。填写完索引的称号后,双击这个索引,弹出Index Properties窗口,在这个窗口的Columns中选择ORDER_ID列。然后,切换到Options页,按图 7的方法将其设置为反向键索引。



    图 7 设置反向键索引

      2) 显式指定主键PK_ORDER利用这个索引。在Table Properties窗口中切换到Keys页,默许情况下,PowerDesigner为T_ORDER所指定的主键名为Key1,我们将其更名为PK_ORDER,双击这个主键,弹出Key Properties窗口,切换到Options页,按图 8的方法为PK_ORDER指定IDX_ORDER_ID。



    图 8 为主键指定特定的索引

      不可否认PowerDesigner真实其实是目前业界最强大易用的数据库企图工具,但很遗憾,当我们为表主键指定一个索引时,其发生发火的语句在挨次上有标题:即创建主键的语句位于创建索引语句之前:

    create table T_ORDER (…);alter table T_ORDER add constraint PK_T_ORDER primary key (ORDER_ID) using index IDX_ORDER_ID;create unique index IDX_ORDER_ID on T_ORDER ( ORDER_ID ASC) reverse;
      我们可以经由对PowerDesigner天生SQL语句的设置截至调整,师长教员成创建表和索引的SQL语句,再创建为表添加主键和外键的SQL语句来达到曲线救国的目的,请看下一步。

      3)经由菜单Database->Generate Database...调出Database Configuration窗口,切换到Keys&Indexes页,按图 9设置:



    图 9 设置天生键和索引SQL的选项

      这里,我们将Primary Keys和Foreign keys的选项都取消,而将Indexes勾选,以达到只天生表的索引SQL语句的目的。

      点击"确定"后,天生创建数据库表及其索引的SQL语句,运转该SQL创建数据库后,再按图 10设置天生为表添加主键和外键的SQL语句:



    图 10 天生创建表主键和外键的SQL语句

      除此设置外,还必须切换到Tables & Views页下,取消一切选项,榨取重新天生创建表的语句。





    版权声明: 原创作品,容许转载,转载时请务必以超链接方法标明文章 原始原由 、作者信息和本声明。不然将追查法律责任。

  • 相关阅读:
    android手机上的app输入法遮挡输入框问题
    简单的百度地图使用
    简单的加入购物车动画效果,需引入外部js文件
    vue项目中axios跨域设置
    一次讲清promise
    js中宏任务,微任务,异步,同步,执行的顺序
    vantUI <van-uploader> 上传图片,如何获取图片的尺寸
    Vue双向绑定原理 从vue2的Object.defineProperty到vue3的proxy
    微信浏览器h5页面开发遇到问题
    Web前端优化最佳实践及工具集锦
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1976074.html
Copyright © 2011-2022 走看看