2011-08-25 49 views
0

返回的記錄數我有一個限制和偏移的查詢。例如:如何在PostgreSQL的

select * from tbl 
limit 10 offset 100; 

如何跟蹤記錄的計數,而不運行第二個查詢,如:

select count(*) from tbl; 

我覺得this回答我的問題,但我需要它的PostgreSQL。有任何想法嗎?

+0

我需要只有一個查詢的東西,因爲我的查詢很慢(約1秒),我不能因性能問題,運行它兩次(我的查詢運行在一個非常大的表全文搜索)。 –

+1

除非您指定'ORDER BY'子句,否則它也沒有意義。 – aib

+0

@ДамянСтанчев:所以這是一個性能問題,實在沒有理由你不能用一個第二,統計查詢? – aib

回答

4

我找到了一個解決方案,我想分享它。我所做的是 - 從應用過濾器的實際表格中創建臨時表格,然後從臨時表格中選擇一個限制和偏移量(沒有限制,因此性能很好),然後從中選擇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; 
0

我還沒有試過這個,但是從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的表後纔有用。

-3

取決於您是否需要從psql CLI或從HTTP服務器訪問數據庫。我使用node-postgres從我的節點服務器使用postgres。結果集返回爲結果對象上的一個名爲'rows'的數組,因此我可以做

console.log(results.rows.length) 

獲取行計數。