我在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(在“使用索引进行排序”下)上找到了关于您所要求的查询的有趣信息/实验。