Привет, мне интересно, улучшит ли производительность дополнительные условия в левом соединении. Пример кода ниже. Мне нужно знать данные о ценах для определенных предложений, но для этого вам понадобятся все данные. Просто интересно, стоит ли добавлять дополнительные условия соединения, чтобы ускорить работу?Left Join Performance с дополнительным фильтром левой таблицы
SELECT
*
FROM
OFFERS
LEFT JOIN PRICE ON (
PRICE.PH_SUBS_LINK_SK = ACTSUBS.PH_SUBS_LINK_SK and
PRICE.PRICE_END_DT= '09-09-9999' and
OFFERS.PERCENT_VALUE >0 and
OFFERS.VALUE_OR_PERCENT = 'PERCENT' and
OFFERS.PRODUCT_OFFER_TYPE = 'RC' and
OFFERS.OFFER_STATUS_CODE in ('ACT','PTM')
)
Это не условия соединения, а фильтры. Фильтрация данных дает лучшую производительность в целом, но зависит от индексов, разделов и т. Д. –
Это будет зависеть от индексов размеров набора данных и других факторов, это не просто использование 'JOIN' vs' WHERE', которое повлияет на производительность. Во-первых, 'IN ('ACT', 'PTM')' часто может быть довольно неэффективным и часто быстрее, чем '(columnName = '' OR columnName = '')'. Вы также можете получить дополнительную помощь от http://dba.stackexchange.com/ как, хотя я считаю, что ваш вопрос также применим здесь, они могут иметь более глубокие знания по оптимизации :) – talegna
Также зависит от того, какие СУБД вы используете. Вы сравнили планы выполнения? –