IOT与SQL Server中的集群索引

时间:2015-04-09 12:52:15

标签: sql-server oracle indexing

我使用sql server工作很多,但我也对oracle世界感兴趣。在大学期间,我使用oracle 8i学习了SQL和面向数据库的东西。

在我目前的工作中,我必须使用sql server(同时我在sql server中获得认证)。

我记得神谕时代,我开始怀疑。

在sql server world中,每个人都推荐聚簇密钥表,即组织为B-tree的表,其中包含叶子中的数据。

在Oracle中的IIRC将是一个索引组织表(IOT)。但是为什么sql server world中的每个人都告诉我聚集索引是默认的方法(特殊情况省略),而在oracle世界中,使用堆表并避免IOT似乎是标准的。

群集索引和物联网之间有区别吗?或者为什么两者都有这样不同的意见。

1 个答案:

答案 0 :(得分:0)

不能对Oracle方面发表评论,但它并非没有SQL Server规则的例外。

作为加入表格的一般指南,如果您已为其添加了合理的聚集索引,优化器将看到它可以直接访问预先排序的数据。也就是说,它可以记录下来并将它们直接拉出来。

使用非聚集索引您更有可能面临书签查找,即它识别连接的索引列值,但是必须通过磁盘上的各个位置查找表中的其余列拉出数据 - 效率低得多。如果规划得当,涵盖索引会提供一种解决方法 - 这意味着您通常需要的列位于索引本身中,从而无需书签查找。

如果没有,例如查看堆,您就会陷入扫描状态。您熟悉在搜索中使用二叉树 - 它可以节省大量的I / O,这些I / O会随着表的大小而增长。

显然,每个要维护的索引在写入数据时都会产生开销,而且大小也很大。如果你有一个非常小的桌子或固定的东西,或经常被清空并重新插入的小桌子,那么你可能会有更好的选择。

希望这不是太简短,但它只是为了你的一般指示 - 不知道它与甲骨文有何不同。现在开始(早期开始),但如果你想要更多的信息(只是提醒我扼杀这个线程),请给我留言,除非这里的人可以在此期间澄清。新来的,但我只能发布那些错过的人的答案。