1

DB にテーブルがあり、約 90 GB のスペースがあります。テーブル内の行数を数えようとしたところ、 select count(idNewsNotification) from notificationその結果になりました

4982397

1 row in set (59 min 48.35 sec)

しかし、それを使用してクエリを実行するshow table status like <table_name>と、それが示されます

 Engine: InnoDB
 Version: 10
 Row_format: Compact
 Rows: 8631267
 Avg_row_length: 11237
 Data_length: 96996425728
 Max_data_length: 0
 Index_length: 175374336
 Data_free: 0
 Auto_increment: NULL
 .....

テーブル内のレコード数を知るための完璧な手順は何ですか?

4

2 に答える 2

2

カウントに 1 時間かかったという事実は、InnoDB を実行していることを意味します (このデータはキャッシュされません)。

そのため、テーブルのステータスは他の要因に基づく概算であり、信頼できるものではありません。

count(*) は正確ですが、待つのは面倒です。

ドキュメントから:

MyISAM などの一部のストレージ エンジンは、正確な数を保存します。InnoDB などの他のストレージ エンジンの場合、この値は概算値であり、実際の値とは 40 ~ 50% ほど異なる場合があります。このような場合は、SELECT COUNT(*) を使用して正確なカウントを取得します。

于 2012-10-19T05:14:59.197 に答える
0

場合によっては、これは良い方法ではありません。

InnoDB テーブルの場合、行数は SQL の最適化で使用される概算にすぎません。(これは、 InnoDB テーブルがパーティション化されている場合にも当てはまります。)

テスト:

私は同じデータベース(別のサーバーにダンプおよびインポート)を両方ともinnoDBに持っています

同じテーブル:

Server One: 49,231
Server Two: 53,242

49231 は正しくありません。この表は phpmyadmin で "~" マークで表示されます。

于 2018-04-13T07:37:45.180 に答える