2011-05-11 215 views
0

我有兩個相同的表,其中一個具有行的當前值,另一個具有新值。我試圖只選擇新值表中的行,其中新值表中的任何列的值與舊值表中的列的值不同。我正在使用的查詢如下所示:以不同的值在行上連接兩個相同的表

SELECT `new`.`item_id` 
    FROM `new_items` AS `new` 
    JOIN `items` AS `old` 
WHERE new.item_id = old.item_id 
    AND (new.price != old.price || 
     new.description != old.description || 
     new.description_long != old.description_long || 
     new.image_small != old.image_small || 
     new.image_large != old.image_large || 
     new.image_logo1 != old.image_logo1) 

但是,此查詢需要太長的時間才能執行。 MySQL是否有更好的方法來做到這一點,或者是否有人知道更高效的查詢?

+0

如果您的數據對於此類操作來說太大而不是使用查詢使用過程。但爲此,你必須焚燒你的油。 – Ankit 2011-05-11 04:42:29

+0

每個表中有多少行?什麼是索引定義? – 2011-05-11 04:46:48

+0

每表大約12,000行沒有索引,我是否應該爲每個這些字段添加一個索引? – chris 2011-05-11 04:48:21

回答

3

用途:

SELECT n.item_id 
    FROM NEW_ITEMS n 
WHERE EXISTS (SELECT NULL 
       FROM OLD_ITEMS o 
       WHERE o.item_id = n.item_id 
        AND (o.price <> n.price 
        OR o.description <> n.description 
        OR o.description_long <> n.description_long 
        OR o.image_small <> n.image_small 
        OR o.image_large <> n.image_large 
        OR o.image_logo1 <> n.image_logo1)) 

所有列的指標進行比較。

+0

嗯,我要去測試這個,看看它是否比我更快,但我不斷收到一個SQL錯誤'你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'第10行'附近使用正確的語法,錯誤位於AND附近,但我無法弄清楚這個查詢有什麼問題 – chris 2011-05-11 05:27:06

+0

ahh錯過了關閉paren – chris 2011-05-11 05:28:05

+0

@Chris:Try現在 - 它缺少一個支架 – 2011-05-11 05:28:15

0

如果item_id(sku)是相當唯一的(表中沒有多個重複的item_id),那麼只需在item_id上添加一個索引即可獲得顯着的性能提升。

相關問題