0

我有一個很大的(超過60多萬條記錄)表。 此表有一個主鍵(id,AUTO_INCREMENT索引ID)慢選擇COUNT(*),information_schema,基數字段

我從這個表中選擇記錄的報告。要瀏覽並瀏覽此報告(用PHP編寫),我正在使用分頁腳本。

此腳本使用SELECT COUNT()獲取此表中的記錄總數。 SELECT COUNT()非常緩慢。

問題: 我可以查詢統計表基數場,INFORMATION_SCHEMA DB在表格名= my_large_table_name和列名= ID和(或)INDEX_NAME是我auto_incremented ID的指標名稱,然後使用結果作爲總我的分頁腳本中的行數?

UPDATE:

或者我可以查詢表TABLESTABLE_ROWS領域information_schema,讓我的表總額流行?結果是否準確?

該表使用InnoDB引擎。

+0

如果它是innodb - 那麼這是一個預期的行爲 – zerkms

+0

它是innoDB。你能告訴我你預期的行爲是什麼意思嗎? – rinchik

+0

預計'COUNT(*)'在innodb中運行緩慢 – zerkms

回答

1

聽起來像一個innodb表,行計數沒有被緩存,因此必須計算。

表統計也不可能是精確的:

對於其它存儲引擎,例如InnoDB,這個值是一個 近似,並且多達40從實際值可能會發生變化 50%。 http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

你見過SQL_CALC_FOUND_ROWShttp://dev.mysql.com/doc/refman/5.0/en/information-functions.html

+0

從文檔:'SQL_CALC_FOUND_ROWS和FOUND_ROWS()'可用於需要限制查詢返回的行數的情況,也可以確定完整結果集中的行而不再次運行查詢。 這不是我真正需要的。試圖運行這個:'SELECT SQL_CALC_FOUND_ROWS * FROM phone_geo; SELECT FOUND_ROWS();'它真的很快...... – rinchik

+0

關於'information_schema'數據庫中的表'TABLES'中'TABLE_ROWS'字段的內容? – rinchik

+0

如果您正在分頁,您可能正在使用「LIMIT」來獲取每頁X記錄。知道'FOUND_ROWS'會告訴你有多少頁面允許。 –