我有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)
提前致谢。
答案 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.storeid
和favorites.person
上获得了INDEX,因为您有JOIN和WHERE条件。