请帮助我获取IOT和正常索引之间的差异
答案 0 :(得分:2)
IOT是存储在B树索引结构的变体中的表。在堆组织表中,将行插入适合的位置。在索引组织表中,行存储在表的主键上定义的索引中。 B树中的每个索引条目还存储非键列值。因此,索引是数据,数据是索引。应用程序使用SQL语句操作索引组织表,就像堆组织表一样。
对于索引组织表的类比,假设人力资源经理有一个纸箱的书柜。每个方框都标有数字-1,2,3,4等,但这些方框不按顺序排列在货架上。相反,每个框都包含指向序列中下一个框的货架位置的指针。
包含员工记录的文件夹存储在每个框中。文件夹按员工ID排序。员工King有ID 100,这是最低的ID,因此他的文件夹位于框1的底部。员工101的文件夹位于100的顶部,102位于101的顶部,依此类推,直到框1已满。序列中的下一个文件夹位于方框2的底部。
在这个类比中,按员工ID排序文件夹可以有效地搜索文件夹而无需维护单独的索引。假设用户请求员工107,120和122的记录。管理员可以按顺序搜索文件夹并检索找到的每个文件夹,而不是在一个步骤中搜索索引并在单独的步骤中检索文件夹。
按索引组织的表可以通过主键或密钥的有效前缀更快地访问表行。叶块中行的非键列的存在避免了额外的数据块I / O.例如,员工100的工资存储在索引行本身中。此外,由于行以主键顺序存储,因此主键或前缀的范围访问涉及最小的块I / O.另一个好处是避免了单独的主键索引的空间开销。
如需了解更多信息,请阅读Overview of IOT
答案 1 :(得分:1)
IOT不是表的索引, 表。
它具有与(B-tree)索引相同的结构,但它不包含指向表的rowid,而是包含整行。
这会产生副作用,即该表中的记录没有永久的rowid(因为它们会在重新组织索引时移动)。如果要在IOT上构建其他索引,这有点问题。它通过使用扩展rowid来解决:辅助索引包含rowid,但是如果它不再有效,它还包含主键,以便您仍然可以识别该行。