1

我有一张用户购买的商品表,在该表中有一个类别标识符。所以,我想向用户展示同一张桌子上的其他商品,他们已经购买过相同的类别。

我正在尝试的查询运行时间超过 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

4 回答 4

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

连接比嵌套子查询快得多。

编辑:尝试不使用group byas :

 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
于 2012-12-05T17:31:26.843 回答
1

如有必要,放置索引的适当位置将是 ondateaddeduser_id/或category

于 2012-12-05T17:31:55.500 回答
1

这是一个查询。并确保在category, user_id,上添加索引dateadded

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
于 2012-12-05T18:38:53.150 回答
0

如果您索引category并且可能dateadded,它应该会加快速度。

于 2012-12-05T17:30:55.227 回答