12

Select Count(*) from SomeTableName好奇心のために、データベースのすべての行を次のようにトラバースすることを知りたいSelect * from SomeTableNameですか?

または、行が追加または削除されるたびに更新される、データベースのメタデータで利用可能な他のカウント フィールドはありますか? そして、そのフィールドは前のクエリによってアクセスされます。

また、両方のクエリのどちらがより高速で、どれくらい速いかを知りたいですか?

4

1 に答える 1

17
SELECT Count(*)
FROM   SomeTableName 

常にすべての行をカウントします。ただし ( とは異なりSELECT *)、すべての列を読み取る必要はなく、使用可能な最も狭い (フィルター処理されていない) インデックスを使用できます。

MySQL (MyISAM エンジン) とは異なり、メタデータから値を取得しません。

行数の値はメタデータで使用でき、そこから取得できますsys.partitionsが、これはCOUNTクエリには使用されず、常に正確であるとは限りません。

于 2013-08-13T10:51:12.247 に答える