2014-12-25 2 views
0

Я работаю с базой данных 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

К сожалению, не заметил ошибку с именем "д" во втором запросе

+2

Ответ зависит от NULLability .sku и его уникальности и мощности. BTW: есть третья версия этого запроса, используя 'NOT EXISTS()' ALSO: имя корреляции 'd' не определено во втором запросе. Таким образом, запрос не удастся, поэтому он будет самым быстрым. – wildplasser

+0

Вы можете использовать команду «EXPLAIN» для детализации плана выполнения запросов - это может помочь вам: http://www.postgresql.org/docs/9.2/static/sql-explain.html –

+0

@wildplasser корреляция имя d не определено во втором запросе. Таким образом, запрос не удастся, поэтому он будет самым быстрым. Это действительно правда и смешно. :) –

ответ

-1

Третья версия :

UPDATE reseller_product u 
SET status = 3 
WHERE u.distributor_id = '||distrID||' 
    AND u.reseller_id = '||resID||' 
    AND NOT EXISTS (
    SELECT * FROM main_table m 
    WHERE m.sku = u.sku 
    ); 
0

Повторная пересылка запроса может несколько помочь, но я бы сначала проверил, имеют ли main_table и reseller_product индексы на sku. Поиск (и объединение) неиндексированного поля имеет сложность O (n), тогда как для индексированного поля это будет O (log (n)) или константа, в зависимости от реализации индекса.

Смежные вопросы