确定, 我有2张桌子。在名为项目的地方,其中存储了所有数据(ID,名称,描述等)和第二个名为精选的表格,其中存储了精选项目列表(id ,itemid)
我想要做的是从特色表中选择5个随机行,并列出与items表中的itemid匹配的列表。 items表有点大,300,000行左右,并且feature目前有106.
次要问题:如果我只是在item表中添加一个列来设置bool(如果它的特色与否)会更好吗?
答案 0 :(得分:4)
SELECT *
FROM featured f
JOIN items i
ON i.id = f.itemid
ORDER BY
RAND()
LIMIT 5
虽然这个查询在大型数据集上可能需要很长时间。
答案 1 :(得分:3)
我个人认为最好使用另一个列而不是另一个表,因为两个表都有相同的超级键。听起来好像JOIN对你来说会很好。
SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5;
答案 2 :(得分:2)
我认为最有效的方法是:
select *
from (select f.*
from featured f
order by rand()
limit 5
) f join
items i
on i.id = f.itemId;
在您的情况下,106行与5行的排序在性能方面可能并不重要。但如果特色列表增长,那么它可能会产生影响。