好的,我有 2 张桌子。在被调用的项目上,所有数据都存储在其中(id、名称、描述等),另一个名为features 的表存储了特色项目列表(id、itemid)
我想做的是从特色表中选择 5 个随机行并列出与 items 表中的 itemid 匹配的列表。items 表有点大,300,000 行左右,featured 目前有 106 个。
第二个问题:如果我只是在 items 表中添加一列来设置 bool 是否具有特色,那会更好吗?
好的,我有 2 张桌子。在被调用的项目上,所有数据都存储在其中(id、名称、描述等),另一个名为features 的表存储了特色项目列表(id、itemid)
我想做的是从特色表中选择 5 个随机行并列出与 items 表中的 itemid 匹配的列表。items 表有点大,300,000 行左右,featured 目前有 106 个。
第二个问题:如果我只是在 items 表中添加一列来设置 bool 是否具有特色,那会更好吗?
SELECT *
FROM featured f
JOIN items i
ON i.id = f.itemid
ORDER BY
RAND()
LIMIT 5
但是,此查询在大型数据集上可能需要很长时间。
我个人认为使用另一个列而不是另一个表会更好,因为两个表具有相同的超键。听起来 JOIN 对你来说很好用。
SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5;
我认为最有效的方法是:
select *
from (select f.*
from featured f
order by rand()
limit 5
) f join
items i
on i.id = f.itemId;
在您的情况下,就性能而言,106 行与 5 行的排序可能无关紧要。但是,如果精选列表增加,那么它可能会有所作为。