我有一个用户购买的商品表,在该表中有一个类别标识符。因此,我想向用户展示同一桌面中的其他项目,并使用他们已经购买的相同类别。
我正在尝试的查询运行时间超过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
答案 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)
如果需要,可以在dateadded
,user_id
和/或category
答案 2 :(得分: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
答案 3 :(得分:0)
如果您在category
以及可能dateadded
上编制索引,那么它应该会加快速度。