Просто поговорим с некоторыми парнями на работе о том, как лучше всего писать запросы и производительность.Производительность Oracle - мне лучше начать с самого маленького набора результатов
Лучше ли ограничивать свой первый набор результатов, чтобы все соединения из исходной таблицы имели меньше строк для соединения?
Например:
ТАБЛИЦА: REFCODE имеет ~ 10000 строк
ТАБЛИЦА: товарный склад имеет ~ 200 строк
Что лучше для производительности?
Используя внутреннее соединение, чтобы сжать строки из большого результирующего набора:
SELECT
*
FROM
REFCODE
INNER JOIN
WHSE ON
WHSE.RCIDX = REFCODE.RCIDX
Использование меньшего результирующего первого:
SELECT
*
FROM
WHSE
INNER JOIN
REFCODE ON
REFCODE.RCIDX = WHSE.RCIDX
Используя большой набор результатов, но с использованием где клаузула фильтр только записи, которые, как я знаю, присоединятся ко второй таблице
SELECT
*
FROM
REFCODE
INNER JOIN
WHSE ON
WHSE.RCIDX = REFCODE.RCIDX
WHERE
REFCODE.TYPE = 'WHSE'
Или будет t он CBO определить план объяснения аналогичный? Мне сказали ребята здесь, что вы всегда должны начинать с самых маленьких результатов, но не уверены!
Любое обсуждение было воспринято!
Фактический порядок таблиц, указанных в предложении from, не влияет на производительность. Я говорю, что ваши сверстники думают о вещах и пытаются оптимизировать без фактов. Просто напишите запрос по мере необходимости, чтобы получить нужные результаты. Посмотрите на файл объяснения или файл TKProf для обеих версий ваших первых двух запросов, CBO проанализирует заявления и, скорее всего, будет иметь одинаковые планы выполнения. Добавление предиката снова изменит план выполнения, потому что теперь это другой запрос. – Wolf