0

好的,我有 2 张桌子。在被调用的项目上,所有数据都存储在其中(id、名称、描述等),另一个名为features 的表存储了特色项目列表(id、itemid)

我想做的是从特色表中选择 5 个随机行并列出与 items 表中的 itemid 匹配的列表。items 表有点大,300,000 行左右,featured 目前有 106 个。

第二个问题:如果我只是在 items 表中添加一列来设置 bool 是否具有特色,那会更好吗?

4

3 回答 3

4
SELECT  *
FROM    featured f
JOIN    items i
ON      i.id = f.itemid
ORDER BY
        RAND()
LIMIT   5

但是,此查询在大型数据集上可能需要很长时间。

于 2013-04-24T21:18:22.593 回答
3

我个人认为使用另一个列而不是另一个表会更好,因为两个表具有相同的超键。听起来 JOIN 对你来说很好用。

SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5;
于 2013-04-24T21:18:47.393 回答
2

我认为最有效的方法是:

select *
from (select f.*
      from featured f
      order by rand()
      limit 5
     ) f join 
     items i
     on i.id = f.itemId;

在您的情况下,就性能而言,106 行与 5 行的排序可能无关紧要。但是,如果精选列表增加,那么它可能会有所作为。

于 2013-04-24T21:29:56.710 回答