哪个sql查询更快?

时间:2014-12-25 11:29:56

标签: postgresql join notin

我正在使用postgresql数据库,并希望改进查询(第一个)。我把它重写为第二个。但我读了一篇文章,其中说“NOT IN”是非常缓慢的构造。我想让你分清哪两个更快和/或建议更好的解决方案。

第一次查询

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);

修改

抱歉,第二次查询中没有注意到名称“d”的错误

2 个答案:

答案 0 :(得分:0)

重写查询可能有所帮助,但我首先要检查main_table和reseller_product是否都在sku上有索引。搜索(和加入)非索引字段具有O(n)复杂度,而对于索引字段,它将是O(log(n))或常量,具体取决于索引实现。

答案 1 :(得分:-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
    );