Sql 连接不同大小的表

Sql 连接不同大小的表,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我有两个表要连接,比如A和B。A更小,有10k记录,B有几百万条记录。连接在A.A=B.B上。A和B都没有索引。我可以在较小的桌子上进行更改,但不能在较大的桌子上进行更改。我需要为连接转换B.B的数据类型。 查询需要很长时间才能运行。有什么方法可以提高性能吗?如果可能,我建议在较小的表上进行转换,并在较大的表中添加索引,因为转换会阻止使用索引 如果由于某种原因无法执行此操作,或者希望返回较大表的很大一部分,例如超过15%,则全表扫描可能是最有效的选择。这里有更多的细节 如果从上面得出结论,完整表

我有两个表要连接,比如A和B。A更小,有10k记录,B有几百万条记录。连接在A.A=B.B上。A和B都没有索引。我可以在较小的桌子上进行更改,但不能在较大的桌子上进行更改。我需要为连接转换B.B的数据类型。
查询需要很长时间才能运行。有什么方法可以提高性能吗?

如果可能,我建议在较小的表上进行转换,并在较大的表中添加索引,因为转换会阻止使用索引

如果由于某种原因无法执行此操作,或者希望返回较大表的很大一部分,例如超过15%,则全表扫描可能是最有效的选择。这里有更多的细节

如果从上面得出结论,完整表扫描是可以的或只是必要的,那么如果您有硬件,查询中的并行提示可能会有所帮助:

select /*+ parallel(B,default) */ <columns here> ...
在上面的代码中,B是希望将并行提示应用于大表的表的别名,默认值是要使用的核心数,如果愿意,可以在此处指定一个数字


在没有看到查询语法的情况下,我无法建议是否还有其他好处。

最有可能获得最佳性能的连接方法是哈希连接,因此不会使用索引

要转换的列将是较小表中的join列,但这只是因为这可能需要更少的CPU周期


只要从较小的表中构建的哈希表适合PGA内存,则查询所需的时间应与两个表的完整表扫描所需的时间大致相同-检查v$sql\u workarea\u在查询执行期间处于活动状态,以监视表的大小以及它是否溢出到临时表空间。

查询需要很长时间才能运行。有什么方法可以提高性能吗?添加索引。查询大约返回多少行?如果可能,您可以发布完整的查询语法。发布更多详细信息,否则我们无法提供帮助。查询语法、表是否分区、结果集的预期大小等。如果所有行都需要联接,则索引不太可能有帮助。