3

まあ、これは現在のデータベース内のすべてのレコードの数を取得するのに十分なはずです:

SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_SCHEMA = DATABASE();

驚いたことに、上記のステートメントを実行するたびに異なる数値が得られます! まず、データベースに問題があると思いました。ただし、MySQL 開発者が提供するサンプル db についても同様です。

上記のステートメントをsakila複数回実行すると、次の値になります。

46362
48104
45170
47060
48139

私が間違っていることは何ですか?これはバグですか?

4

1 に答える 1

6

これは InnoDB のものです。代わりにテーブルで count(id) を実行できますが、遅いです。

遅いため、InnoDB は行のランダム サンプルを取得し、サイズを測定してから、合計サイズを除算して、およその行数を決定します。

于 2013-02-10T15:55:22.373 に答える