返回的記錄數我有一個限制和偏移的查詢。例如:如何在PostgreSQL的
select * from tbl
limit 10 offset 100;
如何跟蹤記錄的計數,而不運行第二個查詢,如:
select count(*) from tbl;
我覺得this回答我的問題,但我需要它的PostgreSQL。有任何想法嗎?
返回的記錄數我有一個限制和偏移的查詢。例如:如何在PostgreSQL的
select * from tbl
limit 10 offset 100;
如何跟蹤記錄的計數,而不運行第二個查詢,如:
select count(*) from tbl;
我覺得this回答我的問題,但我需要它的PostgreSQL。有任何想法嗎?
我找到了一個解決方案,我想分享它。我所做的是 - 從應用過濾器的實際表格中創建臨時表格,然後從臨時表格中選擇一個限制和偏移量(沒有限制,因此性能很好),然後從中選擇count(*)臨時表(再次沒有過濾器),然後我需要和最後的其他東西 - 我放下臨時表。
select * into tmp_tbl from tbl where [limitations];
select * from tmp_tbl offset 10 limit 10;
select count(*) from tmp_tbl;
select other_stuff from tmp_tbl;
drop table tmp_tbl;
我還沒有試過這個,但是從documentation的標題爲Obtaining the Result Status
的部分可以使用GET DIAGNOSTICS
命令來確定命令的效果。
GET DIAGNOSTICS number_of_rows = ROW_COUNT;
從文檔:
這條命令允許檢索系統狀態標識符。每個項目 是一個關鍵字識別的狀態值,以被分配給 指定的變量(它應該是正確的數據類型的接收 它)。當前可用的狀態項有ROW_COUNT,由最後一個SQL命令處理 行數向下發送到SQL引擎, 和RESULT_OID,由最近 SQL命令插入的最後一行的OID。請注意,RESULT_OID僅在將INSERT 命令插入包含OID的表後纔有用。
取決於您是否需要從psql CLI或從HTTP服務器訪問數據庫。我使用node-postgres從我的節點服務器使用postgres。結果集返回爲結果對象上的一個名爲'rows'的數組,因此我可以做
console.log(results.rows.length)
獲取行計數。
我需要只有一個查詢的東西,因爲我的查詢很慢(約1秒),我不能因性能問題,運行它兩次(我的查詢運行在一個非常大的表全文搜索)。 –
除非您指定'ORDER BY'子句,否則它也沒有意義。 – aib
@ДамянСтанчев:所以這是一個性能問題,實在沒有理由你不能用一個第二,統計查詢? – aib