У меня есть простой SQL-запрос, который делает INNER JOIN между таблицами A и B с фильтрацией. Таблица A очень велика, а таблица B довольно мала. Я хочу только вернуть строки, соответствующие определенному фильтру, например, table_B.some_col IN ('a', 'b', 'c', 'd'). Конечно, у меня этот фильтр как предложение WHERE. Однако мне было рекомендовано дублировать один и тот же фильтр, но для таблицы A и поместить его в соединение. Например,SQL - внутреннее соединение между большой таблицей и таблицей с фильтрами
SELECT
*
FROM table_A
INNER JOIN table_B
ON table_A.pk = table_B.pk
AND table_A.some_col IN ('a', 'b', 'c', 'd')
WHERE
table_B.some_col IN ('a', 'b', 'c', 'd')
Утверждается, что при этом улучшается план запроса. К сожалению, из-за ограничений безопасности на моей машине я не могу проверить планы запросов. Это утверждение верно?
удерживайте , ваши два запроса на самом деле разные запросы, без table_A.some_col IN ... вы выбрали бы любой выбранный из B с соответствующим первичным ключом в A - если some_col в B не дублирует значение в A – Cato