我有一個表,我想從中選擇PostgreSQL中的N個隨機行。從Postgresql表中選擇隨機從Where子句和沒有PK
不過,我不想選擇整個表,但我想從尊重一些約束的行中隨機選擇(例如,在範圍內的價格,顏色=「紅」等)
我有已經看到了一些當id以連續方式生成時執行此操作的方法。但是,在這種情況下,會有很多差距。
有沒有辦法做到這一點,而不使用隨機()的順序是昂貴的?
我有一個表,我想從中選擇PostgreSQL中的N個隨機行。從Postgresql表中選擇隨機從Where子句和沒有PK
不過,我不想選擇整個表,但我想從尊重一些約束的行中隨機選擇(例如,在範圍內的價格,顏色=「紅」等)
我有已經看到了一些當id以連續方式生成時執行此操作的方法。但是,在這種情況下,會有很多差距。
有沒有辦法做到這一點,而不使用隨機()的順序是昂貴的?
在PostgreSQL 9.5,你可以使用
TABLESAMPLE與方法伯努利和SYSTEM
海爾是一些很好的例子和解釋,這是更好:
Compare different random methods
首先安裝擴展:
創建擴展tsm_system_rows;
試試這個:
Select * from your_table tablesample system_rows(1000)
哇,謝謝!我會研究它,並試圖瞭解它如何更好地工作明天。它可能會解決我的問題。 – silidragos
它工作的很好,但得到我分組隨機元素,所以如果N是一個隨機數我也得到N + 1,N + 2。我認爲它與分頁有關。但速度更快。 – silidragos
可以使用CTID而不是連續的關鍵,但它可能會隨機取同時'爲了()' –