能否請您指導我到相當於此查詢在Oracle中:怎樣才能在oracle中執行此查詢
SELECT SQL_CALC_FOUND_ROWS * FROM tableName
SELECT FOUND_ROWS() as cnt
感謝
能否請您指導我到相當於此查詢在Oracle中:怎樣才能在oracle中執行此查詢
SELECT SQL_CALC_FOUND_ROWS * FROM tableName
SELECT FOUND_ROWS() as cnt
感謝
查詢從tableName
檢索所有的行,然後檢索數在tableName
中的行。這樣做與SQL_CALC_FOUND_ROWS
只是一個性能優化:它可以節省你做兩個查詢。
如果性能是不是一個問題,對於甲骨文的等效是:
SELECT * FROM tableName
SELECT count(*) from tableName
如果你是在一個位置,改寫了客戶端,你可以在一個查詢一舉兩得:
SELECT *
, (SELECT count(*) from tableName) as totalRows
FROM tableName
對於Oracle 9i +,使用方法:
SELECT COUNT(*) over() found_rows,
t.*
FROM TABLE t
Be aware that it is faster to run separate queries than to use SQL_CALC_ROUND_ROWS in MySQL。
經過更新,提到「OVER」是一項分析功能,直到9i之前Oracle不支持該功能。 – 2010-08-02 20:27:54
以下SQL在單次傳遞中執行第二個選項: 'select *。*,count(*)over()as total_rows from [table_name] a'; – 2010-08-02 17:13:03
@Adam Musch:一次完成它並不是所有的事都被破解了。在OP的版本中,需要對錶進行全面掃描並對索引進行快速全掃描(假設有一個)。對於您的版本,必須將窗口函數應用於全表掃描的結果。在針對超過900萬行的表進行有限測試的情況下,OP的版本明顯更快(特別是對於第一行提示)。 – Allan 2010-08-03 15:02:17
@Allan - 里程可能隨時變化,但最好一次性完成,除非有一個令人信服的理由(例如,有限的排序內存)不適用。 – 2010-08-03 17:58:47