我在PostgreSQL中有一个庞大的表,我需要获得前K个元素。
有没有办法在O(N logK)中选择前K个条目?
最明显的例子:
SELECT *
FROM table
ORDER BY col
LIMIT k
将为我们提供类似于
的O(N logN)解决方案sorted(arr)[:k] # in python
有一种SQL方法可以使用堆来实现吗? 就像在这个例子中一样:
from heapq import nsmallest
nsmallest(k, arr)
使用最小堆是O(N logK)?
答案 0 :(得分:0)
预先在列上创建索引(例如,btree)将显着加快该列上的ORDER BY。在插入过程中,您将获得一些开销,但如果您在指定列上有大量相同表单的查询,这将获得回报。我在this page(在“使用索引进行排序”下)找到了您要求的查询的有趣信息/实验