2015-02-11 60 views
0

我有2個mysql表「store(id,name,imageurl)」和「收藏夾(person,storeid)」。由於IN子句,Mysql查詢速度變慢。任何可能的選擇?

一切工作正常。但隨着數據不斷增加,它越來越慢。我認爲它主要是由於查詢中的'IN'。有沒有什麼方法可以讓這個查詢在執行時更智能一些?

SELECT id,name,imageurl FROM store WHERE id IN 
(SELECT storeid FROM favorites WHERE person='rhino' AND storeid>100000) 

在此先感謝。

回答

1

這是一種替代方法

它看起來像你可以做一個直接查找,而不是IN。事情是這樣的:

SELECT s.id, s.name, s.imageurl 
FROM store s, favorites f 
WHERE f.person='rhino' AND f.storeid>100000 AND f.storeid=s.id 

這種方法避免了JOIN,這可能是過於昂貴。

+0

謝謝。它的工作速度超快,對我來說真正聰明。 ;) – 2015-02-11 15:16:53

+1

很高興幫助.. – karthikr 2015-02-11 15:17:43

2

使用連接語法。無需一個子查詢這裏

SELECT store.id, store.name, store.imageurl 
    FROM store 
    JOIN favorites ON store.id = favorites.storeid 
    WHERE favorites.person = 'rhino' AND store.id > 100000 

您應該使用EXPLAIN讓你的查詢性能的想法。

+0

感謝您的回答。它的工作很好。 – 2015-02-11 15:16:03

+2

感謝@tadman的編輯。解釋的參考是由他添加的 – 2015-02-11 15:39:05

0
SELECT 
store.id, 
store.name, 
store.imageurl 

FROM store 
INNER JOIN favorites 
    ON store.id = favorites.storeid 
    AND favorites.person = 'rhino' 

WHERE store.id > 100000 

這基本上是關於優化查詢 - 在這種情況下JOIN比嵌套選擇要好。

你可能也想確保你已經有了favorites.storeidfavorites.person指標,因爲你已經JOIN和WHERE對他們的條件。