我使用sql server工作很多,但我也对oracle世界感兴趣。在大学期间,我使用oracle 8i学习了SQL和面向数据库的东西。
在我目前的工作中,我必须使用sql server(同时我在sql server中获得认证)。
我记得神谕时代,我开始怀疑。
在sql server world中,每个人都推荐聚簇密钥表,即组织为B-tree的表,其中包含叶子中的数据。
在Oracle中的IIRC将是一个索引组织表(IOT)。但是为什么sql server world中的每个人都告诉我聚集索引是默认的方法(特殊情况省略),而在oracle世界中,使用堆表并避免IOT似乎是标准的。群集索引和物联网之间有区别吗?或者为什么两者都有这样不同的意见。
答案 0 :(得分:0)
不能对Oracle方面发表评论,但它并非没有SQL Server规则的例外。
作为加入表格的一般指南,如果您已为其添加了合理的聚集索引,优化器将看到它可以直接访问预先排序的数据。也就是说,它可以记录下来并将它们直接拉出来。
使用非聚集索引您更有可能面临书签查找,即它识别连接的索引列值,但是必须通过磁盘上的各个位置查找表中的其余列拉出数据 - 效率低得多。如果规划得当,涵盖索引会提供一种解决方法 - 这意味着您通常需要的列位于索引本身中,从而无需书签查找。
如果没有,例如查看堆,您就会陷入扫描状态。您熟悉在搜索中使用二叉树 - 它可以节省大量的I / O,这些I / O会随着表的大小而增长。
显然,每个要维护的索引在写入数据时都会产生开销,而且大小也很大。如果你有一个非常小的桌子或固定的东西,或经常被清空并重新插入的小桌子,那么你可能会有更好的选择。
希望这不是太简短,但它只是为了你的一般指示 - 不知道它与甲骨文有何不同。现在开始(早期开始),但如果你想要更多的信息(只是提醒我扼杀这个线程),请给我留言,除非这里的人可以在此期间澄清。新来的,但我只能发布那些错过的人的答案。