2014-01-16 49 views
0

隨着以下查詢,我得到所有列出的產品多1相同的products_model。確切的我只想要...查詢的速度很糟糕。需要26秒。 avarage在屏幕上獲取數據。 products_model被編入索引。 不知道如何加快這個查詢。也許有人可以幫助我。 謝謝先進。速度問題查詢顯示多個產品相同的型號

SELECT products_model 
FROM products 
WHERE manufacturers_id = 239 
    AND products_model IN (
     SELECT products_model 
     FROM 
     products_guede 
     GROUP BY 
     products_model 
     HAVING count(products_model) > 1 
    ) 
+0

你有權修改索引嗎?也許你應該檢查一個dba來爲products_model應用一個索引。否則,對於查詢本身,您應該使用連接。見下面的答案。 – MrSimpleMind

回答

1

你能試試嗎?

SELECT p.products_model 
FROM products p INNER JOIN products_guede pg 
ON p.products_model = pg.products_model 
WHERE p.manufacturers_id = 239 
GROUP BY p.products_model 
HAVING COUNT(products_model) > 1 

以下索引可能對您有所幫助。

ALTER TABLE products ADD INDEX(manufacturers_id, products_model); 
ALTER TABLE products_guede ADD INDEX(products_model); 
+0

正確!我忘了兩個索引。它現在快速工作只有117毫秒。 – user3202213

+0

@ user3202213我的榮幸;-) –

0

SQLFIDDLE

select 
    p.products_model 
from 
    products p 
    left join products_guede pg 
    on p.products_model = pg.products_model 
-- where manufacturers_id in (239,...) 
group by p.products_model 
having count(*) > 1; 
+0

只需在你的where子句中添加你想要的任何條件。 – MrSimpleMind

0

事實上,檢查,對另一個表中的所有列每一個查詢結果會採取這麼長的時間,巨大的表(超過1000個數據記錄)

試試這個相反:

SELECT count(*) as model_occurence, products_model 
FROM products_guede 
INNER JOIN products on products.products_model = products_guede.products_model 
WHERE manufacturers_id = 239 
GROUP BY products_guede.products_model;