SQL select ... in(select ...)需要很长时间

时间:2012-12-05 17:27:00

标签: mysql sql where-in

我有一个用户购买的商品表,在该表中有一个类别标识符。因此,我想向用户展示同一桌面中的其他项目,并使用他们已经购买的相同类别。

我正在尝试的查询运行时间超过22秒,主要项目表甚至不是3000行......为什么这么低效?我应该索引,如果是哪个列?

以下是查询:

select * from items
    where category in (
        select category from items 
        where ((user_id = '63') AND (category <> '0')) 
        group by category
    ) 
order by dateadded desc limit 20

4 个答案:

答案 0 :(得分:1)

尝试使用自联接以获得更好的性能:

 select i1.* from items i1 JOIN items i2 on i1.category= i2.category
 where i2.user_id = '63' AND i2.category <> '0'
 group by i2.category
 order by i1.dateadded desc limit 20

Join比嵌套子查询快得多。

编辑:在没有group by的情况下尝试:

 select i1.* from items i1 JOIN items i2 on i1.category= i2.category
 where i2.user_id = '63' AND i2.category <> '0'
 order by i1.dateadded desc limit 20

答案 1 :(得分:1)

如果需要,可以在dateaddeduser_id和/或category

上放置索引的合适位置

答案 2 :(得分:1)

这是一个查询。并确保在categoryuser_iddateadded

上添加索引
select i1.* 
from items i1
inner join 
(select distinct 
           category 
        from items 
        where ((user_id = '63') AND (category <> '0'))
) i2 on (i1.Category=i2.Category)


order by i1.dateadded desc limit 20

答案 3 :(得分:0)

如果您在category以及可能dateadded上编制索引,那么它应该会加快速度。

相关问题