【发布时间】:2012-01-22 04:18:02
【问题描述】:
假设一列将仅用于连接。 (即,我不会对列进行排序,也不会单独搜索列中的特定值)......我将使用该列的唯一目的是加入另一个表。
如果数据库支持哈希连接(据我了解,它不会从索引中受益).. 那么添加索引不是完全多余的吗? (而且很浪费)?
【问题讨论】:
-
你怎么知道数据库会(总是)使用哈希连接来连接这个表???
-
给定适当的统计数据......我会假设基于成本的优化器足够聪明,可以在成本更高的嵌套循环(没有索引)上选择散列连接。
-
无法保证 Oracle 将如何执行您的 SQL,解释计划可以改变,数据可以改变,统计可以改变,...
-
通过不添加索引,还可以大大降低使用合并连接的可能性,因为这需要首先添加排序步骤。 FK 关系中的这个连接列也是因为验证 FK 可以使用索引。
-
没有办法保证 Oracle 将如何执行您的 SQL --- 当然 .. 我假设对于小表 Oracle 甚至不会打扰散列连接,只会使用嵌套循环。 .. 但考虑到适当的统计数据,我认为在处理大量数据且没有索引的情况下,Oracle 会在嵌套循环上使用更便宜的哈希连接是合理的。
标签: sql-server oracle join indexing