2017-03-15 57 views
0

我有一個表,我想從中選擇PostgreSQL中的N個隨機行。從Postgresql表中選擇隨機從Where子句和沒有PK

不過,我不想選擇整個表,但我想從尊重一些約束的行中隨機選擇(例如,在範圍內的價格,顏色=「紅」等)

我有已經看到了一些當id以連續方式生成時執行此操作的方法。但是,在這種情況下,會有很多差距。

有沒有辦法做到這一點,而不使用隨機()的順序是昂貴的?

+0

可以使用CTID而不是連續的關鍵,但它可能會隨機取同時'爲了()' –

回答

1

在PostgreSQL 9.5,你可以使用

TABLESAMPLE與方法伯努利和SYSTEM

海爾是一些很好的例子和解釋,這是更好:

How to select random rows

Compare different random methods

More examples here

首先安裝擴展:

創建擴展tsm_system_rows;

試試這個:

Select * from your_table tablesample system_rows(1000) 
+0

哇,謝謝!我會研究它,並試圖瞭解它如何更好地工作明天。它可能會解決我的問題。 – silidragos

+0

它工作的很好,但得到我分組隨機元素,所以如果N是一個隨機數我也得到N + 1,N + 2。我認爲它與分頁有關。但速度更快。 – silidragos