1
私はPostgreSQLに巨大なテーブルを持っており、トップのK要素を取得する必要があります。 O(N logK)のトップKエントリを選択する方法はありますか?
ほとんどの明白な例:効率的なトップK PostgreSQL
SELECT *
FROM table
ORDER BY col
LIMIT k
は私たちに
sorted(arr)[:k] # in python
に似O(N logN個)ソリューションを提供しますヒープを使用してそれを行うためのSQL方法はありますか?この例のよう
:
from heapq import nsmallest
nsmallest(k, arr)
分ヒープを用いてO(N logK)は?
私はPostgreSQLでこれを表現する方法に気付きません。ただし、事前にcolでINDEXを作成すると、ORDER BYは基本的にはO(k)のみの実行時に自由になります。これはもちろん、colを含む同じフォームのクエリがたくさんある場合にのみ意味があります。 – SaiBot
問題は、浮動列があり、任意の数の行を追加できることです(現在の最小/最大要素の値よりも低いまたは高い行を追加できます)。 –
申し訳ありません。 float(数値)値を持つ列に対して索引(たとえば、btree)を作成できます。新しい行を挿入すると、索引で順序が処理されます(わずかな挿入コストの欠点があります)。 – SaiBot