请详细措述DBMS中缺省数据存储方式堆文件是如何对数据组织的(包括静态组织、插入操作、更新操作、数据读取等),为什么大多关系型商用数据库会采用堆文件作为缺省的数据组织方式,堆文件相比其他文件组织形式的优点在哪里?
堆文件是最简单、最基本的文件结构
结构:
数据库的最小单位是块,堆文件的读取是按照块进行读取到内存的,然后再在内存中寻找具体的记录
堆文件的读取是需要遍历整个堆文件数据的
堆文件块记录的更新可能会造成行迁移,行迁移会造成读取单一记录需要读取两个块(2次I/O操作)
表是无组织的
读取/ 访问方式:
没有明确的先后之分,在进行全表扫描时,并不是先插入的数据就先获取。数据的存放是随机的
无组织,堆文件对块的插入是随机
只要有空间,数据可以被放在任何地方
数据库有很多其他的文件组织形式,比如在Oracle中的IOT,及其他很多数据库中的聚簇文件等,堆文件的随机性使其插入更新删除查询效率都很均衡,而其他的文件形式大多是顺序文件,会造成某一种类型的查询效率很高但是其他的操作效率大幅度下降
3. 请描述Oracle中IOT的物理存储结构和读取数据的方式,并与堆文件的物理存储结构和读取数据的方式进行比较后解释IOT的适用范围。
答:
1.IOT是以B树结构作为其物理存储结构的。索引组织表也是一种表,它将其主键作为B树结构中的节点,将其他字段的信息一同存储在B树节点上。IOT读取时是根据主键信息进行查找和读取相关节点上的。
2.与堆文件的存储结构相比。
i、堆文件的存储是随机存储的,而IOT使用的B树结构是根据主键按照一定顺序存储的。
ii、堆文件的读取是需要遍历整个堆文件数据的,而IOT则可以通过主键的信息快速定位到相关节点,读取数据。
3.IOT适用范围:
i、适用于主键很少更新的情况。因为主键更新会导致B树结构的重新调整。
ii、适用于多用主键查询的情况。因为IOT是以主键为节点构造B树的,以主键信息查询能较快找到对应节点。
iii、适用于很少插入新数据的情况。原因同i类似。插入新数据会导致B树重新调整。
6.2 索引组织表 IOT
2. IOT (index organized table )索引组织表,oracle 提供数据存储存储方式
当索引中增加额外的字段(一个或多个,它们本身与实际搜索条件无关,但包含查询所需的数据),能提高某个频繁运行的查询的速度。
IOT 存储在索引结构中的表,所有字段纳入索引,不存在主键的空间开销,允许在主键索引中存储所有数据,这个表本身就是索引
3. 存取方式/ 访问方式
数据的存放是严格规定的, 记录的存放是排序的,查询效率非常高。数据插入以前其实就已经确定了其位置,所以不管插入的先后顺序,它在那个物理上的哪个位置与插入的先后顺序无关。这样在进行查询的时候就可以少访问很多 blocks,但是插入的时候,速度就比普通的表要慢一些。
4. 优点
记录排序,查询效率惊人(最大的优点)
提高缓冲区缓存效率,因为给定查询在缓存中需要的 block 更少。
减少缓冲区缓存访问,提高可扩展性(每个缓冲区缓存获取都需要缓冲区缓存的多个闩 shuan,而闩是串行化设备,会限制应用的扩展能力)。
获取数据的工作总量更少,因为获取数据更快。
每个查询完成的物理 I/O 更少。
节约磁盘空间的占用,主键没有空间开销,索引就是数据
5. 缺点
插入效率也许低于堆文件;
对于经常更新的表不适合用 IOT,因为维护索引的开销较大,何况是多字段索引
6. 适用情况
全索引表:完全由主键组成的表。这样的表如果采用堆组织表,则表本身完全是多余的开销,因为所有的数据全部同样也保存在索引里,此时,堆表是没用的。
代码查找表。如果你只会通过一个主键来访问一个表,这个表就非常适合实现为 IOT.
如果你想保证数据存储在某个位置上,或者希望数据以某种特定的顺序物理存储,IOT 就是一种合适的结构 。
高频度的一组关联数据查询:经常在一个主键或唯一键上使用 between 查询