高效的顶级K PostgreSQL

时间:2017-11-29 11:19:23

标签: python algorithm postgresql sorting heap

我在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)?

1 个答案:

答案 0 :(得分:0)

预先在列上创建索引(例如,btree)将显着加快该列上的ORDER BY。在插入过程中,您将获得一些开销,但如果您在指定列上有大量相同表单的查询,这将获得回报。我在this page(在“使用索引进行排序”下)找到了您要求的查询的有趣信息/实验