2016-04-26 18 views
-1

データベース全体を空にした後3回、同じデータベースを3回インポートし、驚くほど異なるレコード数を表示します。どうして? enter image description here同じ数のレコードを表示している同じMySQLデータベースのインポート

3回目のインポート:

1回目のインポート:インポート enter image description here

2回目 enter image description here

数える行に信頼する権利はありません写真に示すようにエラーが示唆した通りに近似値。だから問題は、データベースが正しいこと、レコードが失われていないことをどうやって保証できるかということです。注:ショートカットは、各テーブルでカウントを使用することはできませんので、時間がかかります。

答えて

2

実際のカウントの使用を望む場合、MySQLは数字で、驚くべきことに、本当に悪いです。 InnoDBテーブルの場合、多くの行が含まれていると見積もられることが多く、間違っている可能性があります。

表示されている数値を計算する方法は、テーブルデータの合計サイズをバイト単位の平均行サイズで割ることです。これは通常、データの近似には十分ですが、非常に誤解を招く可能性があります。最大で100となります。

確かに唯一の方法はCOUNT(*)です非常にアクティブな表で計算します。

+0

ありがとう、私はこのクエリを実行することによってすべてのテーブルを確認することができます任意のショートカットですか? –

+0

ショートカットはありません。アイドル状態のサーバーでは、通常、表ごとにミリ秒かかることがあります。非常に重い筆記活動をしている人では、それ以上の時間がかかります。試してみて、それがあなたのためにどのように実行するかを見てください。あなたが見ている数字はすばやく汚れていて、生産するのにはほとんど時間がかかりません。 – tadman

+0

私はeverytableでそれを試す時間がかかる –

3

phpmyadmin/adminerのようなツールは、常にINFORMATION_SCHEMAから行カウントを取得します。 InnoDbストレージエンジンの場合、行数はおおよその値ですが、正確な値ではありません。 http://dev.mysql.com/doc/refman/5.7/en/tables-table.html

+0

ありがとうございます、私はこのクエリを実行してすべてのテーブルを確認することができますショートカットですか? –

2

私は数字の比較とに依存しないでしょう。正確な値についてはInnoDB

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

のために正確なことはありませんphpmyadminのピックは、我々は参考のため

SELECT count(*) FROM 'table_name'; 

が必要TABLE_ROWS接頭辞としてチルダ(〜)。〜は近似を意味します。

これに対するbencoderの応答に基づいて、 phpMyAdmin - What a tilde (~) means in rows column? は大きく異なる可能性があります。

使用をインポートした行の実数を確認するには: select count(*) from TABLE_NAME

+0

ありがとう、私はこのクエリを実行することによって、すべてのテーブルを確認することができますショートカットですか? –

+0

この質問のNathanから素晴らしいソリューションが報告されています。http://stackoverflow.com/questions/286039/get-record-counts-for-all-tables-in-mysql-database(申し訳ありませんが、正しく解析されていないため、ここにコードを貼り付けることはできません) –

2

をあなたは「負のmysqlのレコード」のすべてがこれはおよそ意味負の符号その〜、ではないことに気づくでしょう。 あなたが

SELECT count(*) FROM 'table_name'; 
+0

ありがとうございます。このクエリを実行すると、すべてのテーブルにショートカットがあることを確認できますか? –

関連する問題