首页 理论教育数据库索引和表访问的基础知识

数据库索引和表访问的基础知识

【摘要】:扫描索引和访问表时DATA FILE和DB BUFFER之间的I/O单位为1 BLOCK。应先了解以下各种表和索引的概念,充分考虑后再进行管理。因此,索引的行数始终小于或等于表的行数。索引和表是独立的对象,事务影响不大时可根据需要随时删除、变更索引。3)表访问如果用于查找条件的列已生成为索引,并且判断应用该索引时更快,则会通过扫描索引访问表。

扫描索引和访问表时DATA FILE和DB BUFFER之间的I/O单位为1 BLOCK。因此,扫描索引时以“读取多少BLOCK”直接确定“执行几次I/O”,以此确定执行速度。但TABLE FULL SCAN时DATA FILE和DB BUFFER之间的I/O单位作为DB_FILE_MULTIBLOCK_READ_COUNT参数值,可读取全表。因此,执行速度根据全表的块数决定。

(1) 1个行通过 UNIQUE INDEX访问表时 I/O:

ROOT BLOCK+BRANCH BLOCK+LEAF BLOCK+TABLE 1 BLOCK=4 I/O

(2)多个行通过UNIQUE INDEX访问表时I/O:

ROOT BLOCK+BRANCH BLOCK+LEAF BLOCK n个+TABLE BLOCK n个=?I/O

(3) 1个行通过 FULL SCAN访问表时 I/O:

表全部块数 /DB_FILE_MULTIBLOCK_READ_COUNT

(4)多个行通过 FULL SCAN访问表时 I/O:

表全部块数 /DB_FILE_MULTIBLOCK_READ_COUNT

1)索引数据生成

随着数据在客户表中生成,显示如何生成“姓名”列的索引数据,如图3-3所示。应先了解以下各种表和索引的概念,充分考虑后再进行管理。

(1)在客户表中添加一个行时,如果含有姓名则每次生成一个索引;如果姓名为null则不会生成索引。因此,索引的行数始终小于或等于表的行数。

(2)索引将根据成为索引的列值按升序进行创建,包含binary tree结构中已转换的balanced tree结构。

(3)索引和表是独立的对象,事务影响不大时可根据需要随时删除、变更索引。

(4)数据变化较大的表应最大限度地减少索引,必要时应定期执行REORG操作。

图3-3 索引数据生成(www.chuimin.cn)

注意:Orange还包含Online Reorg Edition。作为对象Oracle DBMS的Online Reorg正在运行时也可对DBMS内的多个对象进行REORG,应用程序的停机时间为非应用业务而设计。因此适用于24 h持续进行的E-Business业务数据库操作系统。REORG操作可起到的效果包括:通过重新排列数据库内的表空间、表、索引等最小化I/O需求;快速服务响应各个QUERY和BATCH JOB、APPLICATION SERVER的操作请求;增加了可用存储空间,事先阻止因空间(space)不足产生错误并恢复浪费的磁盘空间,提高数据库的性能和减少停机时间影响等。

(5)为优化查找几乎未变更数据的表而添加索引时,无须限制。

(6)索引的生成 Script: CREATE (UNIQUE) INDEX [INDEX_NAME] ON CUSTOMER(NAME);索引中包含相应表的行位置相关信息(ROWID),表的行位置变化时会变更该位置。因此,对于因表的物理存储位置变更操作或批量操作时而受到影响的索引,最好对其进行 DROP+RECREATE。

2)表访问(无索引时)

使用查找条件的列未包含索引时无法应用索引,需要查找整个表,一般称为FULLTABLE SCAN。扫描整个表时,就算中途找到满足条件的数据,剩余部分中还可能有满足条件的数据,所以结果还是要读取整个表。执行此类FULL SCAN时,表的大小(block数)会影响速度。

(1) physical I/O数:表块数 /DB_FILE_MULTIBLOCK_READ_COUNT。

(2) FULL-TABLE SCAN时表块将根据 LRU算法(需要最近使用最少的内存空间时最先使用的算法)记录为least block。因此引起physical I/O的可能性始终很高,是降低DB buffer hit ratio的因素,从整体上看会成为降低性能的要素。为解决此问题,可对表设置CACHE option或使表位于DB BUFFER的KEEP区域。

(3)对表进行 FULL SCAN时,访问路径在执行计划中将按以下方式表示:

TABLE ACCESS (FULL ) OF' CUSTOMER'。

3)表访问(有索引时)

如果用于查找条件的列已生成为索引,并且判断应用该索引时更快,则会通过扫描索引访问表。索引扫描中如果遇到不满足条件的数据,则会判断剩余部分也没有满足条件的数据,将停止扫描。在索引扫描时,索引扫描的访问范围会影响速度。

(1) Physical I/O数:索引扫描块数(root+branch+ leaf)+表扫描块数。

(2) INDEX SCAN时表块将根据LRU算法记录为recently block。因此引起physical I/O的可能性始终很低,且再次使用的可能性较高,是提高 DB buffer hit ratio的因素。

(3)访问路径按以下方式表示:

作为参考,如果索引是NONUNIQUE,为输出准确的查找值必须始终确认不满足条件的数据,因此需要多访问一个超出有效范围的行。