由于IN子句,Mysql查询变慢。任何可能的选择?

时间:2015-02-11 14:54:42

标签: php mysql database mysqli

我有2个mysql表“store(id,name,imageurl)”和“favorites(person,storeid)”。

一切都很好。但随着数据的增加,它变得越来越慢。我认为这主要是由于查询中的“IN”。有没有办法让这个查询在执行时更聪明一些?

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

提前致谢。

3 个答案:

答案 0 :(得分: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来了解您的查询效果。

答案 1 :(得分: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,这也可能很昂贵。

答案 2 :(得分: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上获得了INDEX,因为您有JOIN和WHERE条件。