Я работаю с базой данных postgresql и хочу улучшить запрос (первый). Я переписал его второму. Но я прочитал статью, в которой говорится, что «NOT IN» - очень медленная конструкция. Я хочу, чтобы вы сказали, кто из двух быстрее и/или предлагает лучшее решение.Какой SQL-запрос выполняется быстрее?
Первый запрос
UPDATE reseller_product d SET status=3 FROM (
SELECT reseller_product.sku FROM reseller_product
LEFT OUTER JOIN main_table ON main_table.sku=reseller_product.sku
WHERE main_table.sku IS NULL AND reseller_product.reseller_id='||resID||'
)as r
WHERE d.sku=r.sku and d.distributor_id='||distrID||' and d.reseller_id='||resID||'
Второй запрос
UPDATE reseller_product SET status=3
WHERE distributor_id='||distrID||' AND reseller_id='||resID||'
AND sku NOT IN (SELECT sku FROM main_table);
EDIT
К сожалению, не заметил ошибку с именем "д" во втором запросе
Ответ зависит от NULLability .sku и его уникальности и мощности. BTW: есть третья версия этого запроса, используя 'NOT EXISTS()' ALSO: имя корреляции 'd' не определено во втором запросе. Таким образом, запрос не удастся, поэтому он будет самым быстрым. – wildplasser
Вы можете использовать команду «EXPLAIN» для детализации плана выполнения запросов - это может помочь вам: http://www.postgresql.org/docs/9.2/static/sql-explain.html –
@wildplasser корреляция имя d не определено во втором запросе. Таким образом, запрос не удастся, поэтому он будет самым быстрым. Это действительно правда и смешно. :) –