2011-07-14 18 views
14

大きな表の行の総数を最も効率的に数える方法は何ですか?私、23万行を持つテーブルがあると次のクエリでは、生産、ハードウェア上の30秒以上かかる:MySQL:大規模なテーブルの行数を効率的に数える方法は?

select count(*) from tablename; 

MySQLがテーブルスキャンをやってしなければならないようだが、必要である必要があり、このように見えるしていません。

+0

から主キーを持っていますか?テーブルにはどのようなインデックスがありますか? –

+0

@Jacob、それは本当に重要ですか? InnoDbは存在する場合、23mi PKまたはインデックスを数えなければなりません。 – Tocco

+0

インデックススキャンを実行している可能性がありますが、まだ遅いです。 –

答えて

3

InnoDBではテーブルのローカウントが遅いです。

一方、MyISAMはテーブルのプロパティとして行数を持っているため、MyISAMでクエリが本当に速くなります。

+0

+1 MyISAMの場合、InnoDBはそれをカットしません:P –

+1

これはInnoDBのACID準拠の代償です。 – Mchl

14

近似が十分にある場合は、あなたが使用することができます。

show table status like 'tablename' 
+0

FROM、そうではない:) – Karolis

+2

@Karolis:no。 SHOW TABLE STATUS [FROM database] [LIKE 'パターン']です。 – wonk0

+0

@ wonk0ええ。あなたが正しいです。 – Karolis

0

使用キャッシュクエリSELECT SQL_CACHE数(COLUMN_NAME)テーブル

+0

クエリキャッシュはMySQL 5.7.20以降で廃止され、MySQL 8.0では削除されています。 – DidThis

関連する問題