知识大全 索引存储关系到数据库的运行效率

Posted 索引

篇首语:亦余心之所善兮,虽九死其犹未悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 索引存储关系到数据库的运行效率相关的知识,希望对你有一定的参考价值。

  在Oracle数据库中 数据库管理员不仅在索引的选择上要花费一定的精力 而且 在索引的存储上 也有所讲究 因为索引与表一样 不仅需要在数据字典中保存索引的定义 还需要在表空间中为他分配实际的存储空间 并为其设置存储参数 数据库管理员若能够给索引分配合理的表空间 并且设置合适的参数的话 则可以在一定程度上提高数据库的运行效率

  虽然说 在建立索引的过程中 不为其指定具体的存储参数也是可行的 索引会自动继承所处表空间的默认存储参数 不过 在数据库设计过程中 笔者是不建议这么做 因为这不能够发挥Oracle数据库高性能的优势 特别是在一些比较复杂的数据库设计中 一定要根据实际情况 合理的索引存储进行配置 以达到数据库性能优化的目的

  具体的说 数据库管理员可以从如下几个方面入手 做好索引的存储管理

  第一步 为索引指定存储的表空间

  当数据库管理员为表或者字段建立索引的时候 可以选择是否指定具体的表空间 若没有具体指定的话 则数据库会自动在用户的默认表空间创建索引段 这里初学者要注意 索引的存储默认表空间不是跟着其所对应的数据库对象走 而是跟着用户走 也就是说 现在有一张员工信息表 要为其建立一个索引 并不是说这张员工信息表属于哪个表空间 这对应的索引默认也是哪个表空间 而这个索引的默认表空间是建立这个索引的用户的默认表空间

  索引是对表中字段进行排序的一种手段 在数据库管理员创建索引的时候 Oracle首先对建立索引的字段进行排序 然后将排序后的字段值和相应记录的Rowid存储在索引段中 而这个数据存储 就需要用到一定的存储空间 即我们所为的表空间 若一张表中发索引比较复杂 则其索引本身的空间可能比表中数据所占用的空间还要大 可见 对于索引的表空间进行管理的必要性

  在索引的建立过程中 对于其所存储的表空间没有特殊的限制 如不需要像其他数据库一样 要求把索引与表建立在同一个表空间或者磁盘上 数据库管理员可以根据企业自身的需求 合理的为索引分配存储空间

  不过 笔者认为 最好能够把表与索引保存在不同的表空间中 因为Oracle数据库能够并行读取不同磁盘中的数据 从而达减少输入输入冲突的目的 而现在把索引与其对应的表存放在不同硬盘上的不同表空间中 就可以提高查询的效率 往往在数据库性能优化中 调整索引与基础表的表空间位置 这也是我们数据库管理员常用的手段之一 故 笔者建议 最好能够为索引建立一个独立的表空间 跟其对应的表分开存放 若数据库服务器有多个磁盘的话 可以考虑分别存放在不同的磁盘上

  另外 若把索引跟对应的表存储在不同的表空间中的话 在数据库备份的时候 要稍加注意 因为Oracle数据库允许数据库管理员以表空间为单位 对数据库进行备份与还原 此时 若把它们存储在不同的表空间的话 则对数据表所在的表空间进行备份的时候 就不会备份索引信息 在还原的时候 也不会自动把表空间对应的索引进行还原 所以 若把索引与表存放在同一个表空间中 则对于数据库备份来说 要方便一点 但是 这毕竟是次要的 比起数据库的性能来说 这点困难还是可以克服的

  第二步 为提高更新性能合理配置空闲空间管理方式

  索引不仅跟数据库的查询效率息息相关 而且 还跟数据库的更新有重要的影响 因为要对数据进行更新 往往伴随着对数据进行查询 所以 合理设置索引空闲空间的处理方式 可以有效的提高数据库的更新性能

  数据库创建索引的时候 主要是通过Pctfree参数来指定为更新操作而预留的空闲空间百分比 如果数据库管理员把这个参数设置为 % 就表示数据块中的数据所占用的空间少于总空闲空间的 % 时 可以直接利用这个空闲空间来存储需要更新的数据 当现有数据块的数据超过了这个比例后 则发生更新动作时 就需要为其分配新的数据块了

  可见 当频繁的为更新作业分配数据块的时候 会极大的影响数据更新的效率;同时 因为增加新的数据块 还会耗用服务器的硬件资源 如内存等等 这无疑会影响除了更新作业之外的其他作业 会对整个数据库的运行性能产生不利的影响

  所以 在创建索引的时候 数据库管理员要合理的配置这个参数 具体什么参数是合适的 没有一个严格的标准 这主要是根据索引对应的表 是否需要进行频繁的更新来决定的 当这个索引所对应的表 可能要进行频繁的变更 则最好能够为其指定比较大的Pctfree参数 以提高数据库的更新性能 如对于ERP系统中的订单变更表或者价格信息表 起码要把这个参数指定为 % 或者更高 相反 对于系统中不怎么进行更新的产品基本信息表 则可以把这个参数设置为 % 或者更低

  不过 数据库管理员需要注意 并不是说Pctfree参数设置的越大越好 这主要是因为天下没有白吃的午餐 Pctfree设置的比较大 并不是说是百利而无一害的 把Pctfree参数设置的偏大 是以牺牲存储空间未代价的 所以 对于一些更新很好的表 在为其建立索引的时候 没有必要为其指定比较大的Pctfree参数 我们也可以利用Pctused参数来进行类似的设置 这个参数的用途跟Pctfree大同小异 也是对索引空闲空间管理的一种方式

  另外对于数据库表更新来说 还有一些索引管理手段 可以提高数据库的更新性能

如在企业导入基础数据的时候 若某需要在某张表中插入大量数据 则此时最好能够把这张表中的索引先取消掉 因为根据索引的工作机制 每在数据库表中插入一条记录的时候 数据库都要根据插入的数据 更改索引 若插入的记入比较多 而这张表的索引也比较复杂的话 则数据更新的效率就会比较慢 为了提高数据表导入的效率 最好能够在这个工作之前先把索引都禁用掉 等到导入完毕后 再重新启用索引

  第三步 为索引指定区分配方式

  在索引创建过程中 虽然可以通过Storage语句来指定存储空间的区分配方式 但是 笔者觉得这个没有多大的实际意义 一方面起指定的参数比较少 只能够指定创建索引时分配的第一个区的大小 另一方面 这对于提高数据库的性能 索引的管理效率 没有多大的效果

  所以 笔者在创建索引的过程中 基本上是不用Storage语句来指定其存储空间的区分配方式 或许其他数据库管理员有不同的见解 大家可以讨论讨论

cha138/Article/program/SQL/201311/16344

相关参考

知识大全 定时执行存储过程对库表及索引进行分析

  参考了一下别人的代码又补充了一下写了一个存储过程    分析某一用户下面的表及索引    运行完毕后然后设置job即可    createorreplaceprocedureDBA_ANAYZE_

知识大全 SQL大数据量分页存储过程效率测试

SQL大数据量分页存储过程效率测试  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  /*存储过程分

知识大全 数据结构考研分类复习真题 第一章 绪论[7]

  在顺序存储结构中有时也存储数据结构中元素之间的关系(   )【华南理工大学一(分)】  顺序存储方式的优点是存储密度大且插入删除运算效率高(  &

知识大全 hadoop中hdfs主节点会储存数据吗

hadoop中hdfs主节点会储存数据吗不会存储数据,数据节点专门存储数据,主节点存储了元数据信息。主节点的磁盘中存储了文件到块的关系,集群启动后,数据节点会报告名字节点机器和块的关系,这两个关系组合

知识大全 存储参数storage子句含义及设置技巧

  系统环境  操作系统Windows  数据库 OracleiR()forNT企业版  安装路径C:\\ORACLE    解释        可用于表空间回滚段表索引分区快照快照日志    参数名

知识大全 高级扫描提高数据库查询性能

  一高级扫描使用举例  通常情况下在数据查询的时候数据库会利用索引或者通过全表扫描来查找数据但是如果需要的数据在数据库中存储不连续或者需要查找的记录比较多时此时索引的效果就会大打折扣在这种情况下数据

知识大全 存储过程编写经验和优化措施[2]

    b)索引的使用规范   i索引的创建要与应用结合考虑建议大的OLTP表不要超过个索引   ii尽可能的使用索引字段作为查询条件尤其是聚簇索引必要时可以通

知识大全 ORACLE索引提高效率

ORACLE索引提高效率  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  用索引提高效率  索引是

知识大全 数据结构之线性表的链式存储[1]

  顺序表的存贮特点是利用物理上的相邻关系表达出逻辑上的前驱和后继关系它要求用连续的存储单元顺序存储线性表中各元素因此对顺序表进行插入和删除时需要通过移动数据元素来实现线性表的逻辑上的相邻关系从而影响

知识大全 09年自考《数据结构》各章要点二[12]

  顺序文件的插入删除和修改只能通过复制整个文件实现  索引文件的组织方式通常是在主文件之外建立一张索引表指明逻辑记录和物理记录之间一一对应的关系它和主文件一起构成索引文件  索引非顺序文件中的索引表