记录要选择N个记录每一个类可以做:如何有效地查询牛每
SELECT category, category_id, value FROM
(
SELECT category, value, row_number() OVER (PARTITION by category) as category_id
FROM myTable
)
WHERE category_id < N;
内部的选择将第一个分区每个类别中的记录,并指定每个类别中的每个记录称为CATEGORY_ID的ID。 然后,外部查询将使用category_id来限制每个类别查询的记录数。
这是在BIG表上效率非常低,因为它将通过将ID分配给所有记录,即使我们只对每个类别的N个记录感兴趣。
以下不适用于我正在使用的sql引擎 - 不知道它是否适用于任何引擎。
SELECT category, value, row_number() OVER (PARTITION by category) as category_id
FROM myTable
WHERE category_id < N
有没有人知道有更好的时间复杂性来实现这一目标的其他方法?
更多的想法:
时间谱对上面的查询下面的算法可能会提供更多的见解,以查询幕后如何运行:
1. SELECT DISTINCT(category) FROM myTable
2. FOREACH category SELECT N rows
更多信息: 我的数据是物理分区category
,能够明确利用这将是有用的
即使你的第二个查询将一些RDBMS工作,执行计划很可能是相同的第一个 – Lamak
你可以尝试派生表转储到#TEMP并创建索引,然后查询它 – LONG
用您正在使用的数据库标记您的问题。 –