Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在索引组织表和普通表上重建索引有什么区别?_Database_Algorithm_Oracle_Database Design_Indexing - Fatal编程技术网

Database 在索引组织表和普通表上重建索引有什么区别?

Database 在索引组织表和普通表上重建索引有什么区别?,database,algorithm,oracle,database-design,indexing,Database,Algorithm,Oracle,Database Design,Indexing,从 请注意,重建二级索引 在索引组织的表上 读取基表,不像 在普通数据库上重建索引 桌子 为什么在普通表上重建索引不需要读取基表?引用 重建索引时,使用 作为数据源的现有索引 我相信这是因为索引通常用于重建自身,以及如何在索引中使用物理rowid 普通表上的索引存储物理rowid,但由于索引组织的表在结构上是流动的,所以辅助索引只能存储物理rowid 在普通表上重建索引时,它不需要为物理rowid引用源表,因为索引中已经有这些rowid。但是在索引组织的表上,重建必须再次检查物理rowid,因此

请注意,重建二级索引 在索引组织的表上 读取基表,不像 在普通数据库上重建索引 桌子

为什么在普通表上重建索引不需要读取基表?

引用

重建索引时,使用 作为数据源的现有索引


我相信这是因为索引通常用于重建自身,以及如何在索引中使用物理rowid

普通表上的索引存储物理rowid,但由于索引组织的表在结构上是流动的,所以辅助索引只能存储物理rowid


在普通表上重建索引时,它不需要为物理rowid引用源表,因为索引中已经有这些rowid。但是在索引组织的表上,重建必须再次检查物理rowid,因此被迫扫描基表。

但是如果索引过期,它包含错误的信息,那么如何使用它来更新自己而不参考表?索引本身不能过期,它可以有错误/不准确的块位置猜测,但是它包含的实际数据必须是准确的,考虑另一种选择,如果允许索引启用但不准确,查询引擎永远不能使用它们。但是如果普通表索引过时,则包含错误信息,那么,如何在不引用表的情况下使用它来更新自身呢?重建索引更多的是将其重新构造以提高效率,而不是数据“错误”。对于索引组织的表,索引中存在错误的数据,物理rowid猜测在对表进行大量更新后肯定会偏离目标。Oracle的文档应为“在堆组织的表上重建可用索引”。重建索引(或分区/子分区)如果索引不可用,则需要重新读取基表。