記錄要選擇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
用您正在使用的數據庫標記您的問題。 –