Альтернатива к Левым Соединениям на больших наборах данных

Если я должен был сделать левое соединение между 2 таблицами (для выполнения некоторого анализа между ними), но оба набора данных являются слишком большими, чтобы это было выполнено в едином запросе, что лучшая практика должна выполнить это?

Я видел ВЫБОРКУ в документации, но не был уверен, используется ли это традиционно для цикличного выполнения по всем наборам данных. Так как я полагал, что эта задача должна была быть распространена, я не собирался уничтожать меня пробующий к неправильно ВЫБОРКЕ мешанины или СМЕЩАТЬ для выполнения моего анализа.

Примечание: Это - локальная база данных и не будет изменено через продолжительность процедуры - так соображения производительности, и транзакции не являются фактором.

Я использую PostgreSQL, но я уверен, что практика подобна через весь современный DBMS.

1
задан Borealid 13 July 2010 в 04:30
поделиться

1 ответ

Я согласен с замечаниями о том, что современная СУБД должна уметь соединять любые таблицы, которые она может хранить. Иногда нужно сказать базе данных, чтобы она не пыталась соединять хэши в гигантских таблицах; хэш-соединения очень быстрые, но не для соединений, где хэш не помещается в памяти. В 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 в обеих таблицах.

2
ответ дан 2 September 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: