如果我需要在两个表之间进行左连接(为了在它们之间运行某种分析),但是两个数据集都太大而无法在单个查询中执行,那么实现这一目的的最佳实践是什么?
我在文档中看到了FETCH,但不确定这是否通常用于遍历整个数据集。因为我认为这个任务必须是司空见惯的,所以我不会为了完成我的分析而试图不正当地大杂化FETCH或OFFSET。
注意:这是一个本地数据库,在整个过程中不会被更改 - 因此性能考虑和事务不是一个因素。
我正在使用PostgreSQL,但我确信所有现代DBMS的实践都相似。
答案 0 :(得分:2)
我同意现代DBMS应该能够加入他们可以存储的任何表的评论。有时您必须告诉数据库不要在巨大的表上尝试散列连接;散列连接非常快,但不适用于散列不适合内存的连接。对于PostreSQL,您可以使用以下命令禁用散列连接:
SET ENABLE_HASHJOIN TO FALSE
话虽如此,如果您以较小的批次拆分查询,某些数据库的效果会更好。您可以使用子查询批量分区连接:
select *
from (
select *
from YourTable1
where CustomerName like 'A%'
) a
left join
(
select *
from YourTable2
where CustomerName like 'A%'
) b
on a.CustumerName = b.CustomerName
如果有一种有效的过滤方式,这只会对数据库有所帮助。在该示例中,这将是两个表中CustomerName
的索引。