我在postgresql中有一个很大的表,我需要得到前k个元素。
有没有办法选择o(n logk)中的前k个条目?
最明显的例子:

SELECT *
FROM table
ORDER BY col
LIMIT k

会给我们类似于
sorted(arr)[:k] # in python

有没有一种sql方法可以使用堆来完成它?
如本例所示:
from heapq import nsmallest
nsmallest(k, arr)

哪一个是O(N logK)使用最小堆?

最佳答案

预先在列上创建索引(例如btree)将显著加快该列上的order by。在插入期间,您将获得一些开销,但如果您在指定列上有许多相同表单的查询,则这将得到回报我在this page(在“使用索引进行排序”下)上找到了关于您所要求的查询的有趣信息/实验。

10-02 03:57