Если я должен был сделать левое соединение между 2 таблицами (для выполнения некоторого анализа между ними), но оба набора данных являются слишком большими, чтобы это было выполнено в едином запросе, что лучшая практика должна выполнить это?
Я видел ВЫБОРКУ в документации, но не был уверен, используется ли это традиционно для цикличного выполнения по всем наборам данных. Так как я полагал, что эта задача должна была быть распространена, я не собирался уничтожать меня пробующий к неправильно ВЫБОРКЕ мешанины или СМЕЩАТЬ для выполнения моего анализа.
Примечание: Это - локальная база данных и не будет изменено через продолжительность процедуры - так соображения производительности, и транзакции не являются фактором.
Я использую PostgreSQL, но я уверен, что практика подобна через весь современный 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
в обеих таблицах.