2011-07-14 82 views
14

如何最有效地計算大表中的總行數?我有23萬行的表和下面的查詢需要對生產硬件30+秒:MySQL:如何高效地計算大表中的行數?

select count(*) from tablename; 

看來,MySQL必須做一個表掃描,但它似乎並不像這應該是必要的。

+0

你有一個主鍵?桌上有什麼指標? –

+0

@Jacob,真的很重要嗎?如果InnoDb存在,InnoDb將不得不計數23mi的PK或索引。 – Tocco

+0

它可能在做索引掃描,但它仍然會很慢。 –

回答

3

InnoDB中一個表的行數很慢。

另一方面,MyISAM將行計數作爲表的屬性,這使得您的查詢在MyISAM上非常快速。

+0

對於MyISAM來說+1,有時InnoDB並不會削減它:P –

+1

這就是您在InnoDB中爲遵守ACID付出的代價。 – Mchl

14

如果一個近似是不夠的,你可以使用:

show table status like 'tablename' 
+0

從,不喜歡:) – Karolis

+2

@Karolis:沒有。它是SHOW TABLE STATUS [FROM數據庫] [LIKE'pattern']。 – wonk0

+0

@ wonk0是的。你是對的。 – Karolis

0

使用緩存查詢SELECT SQL_CACHE數(列)從表

+0

查詢緩存自MySQL 5.7.20起棄用,並在MySQL 8.0中刪除。 – DidThis

相關問題