2010-08-02 50 views

回答

1

查詢從tableName檢索所有的行,然後檢索數在tableName中的行。這樣做與SQL_CALC_FOUND_ROWS只是一個性能優化:它可以節省你做兩個查詢。

如果性能是不是一個問題,對於甲骨文的等效是:

SELECT * FROM tableName 
SELECT count(*) from tableName 

如果你是在一個位置,改寫了客戶端,你可以在一個查詢一舉兩得:

SELECT * 
,  (SELECT count(*) from tableName) as totalRows 
FROM tableName 
+3

以下SQL在單次傳遞中執行第二個選項: 'select *。*,count(*)over()as total_rows from [table_name] a'; – 2010-08-02 17:13:03

+0

@Adam Musch:一次完成它並不是所有的事都被破解了。在OP的版本中,需要對錶進行全面掃描並對索引進行快速全掃描(假設有一個)。對於您的版本,必須將窗口函數應用於全表掃描的結果。在針對超過900萬行的表進行有限測試的情況下,OP的版本明顯更快(特別是對於第一行提示)。 – Allan 2010-08-03 15:02:17

+0

@Allan - 里程可能隨時變化,但最好一次性完成,除非有一個令人信服的理由(例如,有限的排序內存)不適用。 – 2010-08-03 17:58:47