我需要一个具有近 10 万条记录的 mysql 表中每个子类别的前 6 条记录。我尝试了以下 mysql 查询,但我担心它在具有大量记录的表中的性能。
SELECT
*
FROM
(SELECT
sub_cat_id,
title,
@rn:=IF(@prev = sub_cat_id, @rn + 1, 1) AS rn,
@prev:=sub_cat_id AS previd,
created_date
FROM
blog
WHERE
type = 'BLOG'
AND FIND_IN_SET(sub_cat_id, '1,2,8')
AND created_date <= NOW()
ORDER BY sub_cat_id DESC , created_date DESC) AS records
WHERE
rn <= 6
在上面的查询中,MySQL 将对 sub_cat_id 为 1,2 和 8 的所有记录进行编号。在外部选择查询中,每个子类别的记录将减少到 6 条记录。
我有以下顾虑
- 这是为每个子类别获取 6 条记录的更好和最快的方法吗
- 此查询是否生成所需的结果。
这是我的博客表
+-------- +------------+-------+--------------+
| blog_id | sub_cat_id | title | created_date |
+-------- +------------+-------+--------------+
| 1 | 1 | ABC | 2018-05-25 |
| 2 | 1 | ABC | 2018-05-22 |
| 3 | 2 | ABC | 2018-05-23 |
| 4 | 2 | ABC | 2018-05-21 |
| 5 | 2 | ABC | 2018-05-20 |
| 6 | 8 | ABC | 2018-05-15 |
+-------- +------------+-------+--------------+