phpMyAdminの合計件数が少なく表示される原因と解決策

つい最近気づいたことです。

  • phpMyAdminで巨大テーブルを見る
  • 例えば100万件とか1000万件とか
  • その合計件数が実際よりも少ない
  • ブラウザ上で一部レコードが表示されない

それはphpMyAdminの仕様に原因があります。

なるほどなと少し驚いたので、
合計件数が少なく表示される問題をまとめます。

100万件のレコードの合計件数が会わない

あるテーブルに100万件レコード挿入しました。
エラーなし、問題なく挿入できたみたいです。

ところがphpMyAdminで表示してみると…

▼ なんか表示件数が少なくない?

100万件あるテーブルをphpMyAdminで見たら合計件数が997899件と表示された。表示件数が少ない…?

100万件ピッタリのINSERTを実行したにも関わらず、行数が997899件と表示されてます。最初見たときは「クエリの一部が失敗したのかな?」とか思っちゃいました。

そしてブラウザ上でレコードを確認。

最後までページングしても合計件数が合いません。

▼ このような感じになってた

phpMyAdminで巨大テーブルを見ると、最後までページングしても合計件数が合わない

これは巨大なテーブルで起こりがちな現象です。

理由はphpMyAdminは概算件数を表示するから

その理由はphpMyAdminの仕様にあります。

▼ 行数取得はこういう仕様になってる

3.11 InnoDB のテーブルの行数が正しくありません。
phpMyAdmin は簡潔な方法で行数を取得していますが、この方法では InnoDB テーブルの場合に概数しか返ってきません。この結果を修正する方法は $cfg['MaxExactCount'] を参照してください。ただし、これは性能に深刻な影響を与える可能性があります。もっとも、概算の行数をクリックすると、正確な行数に簡単に置き換えることができます。これは、最下部に表示されている行数の合計値をクリックすれば、すべてのテーブルを一度に更新できます。

引用元 : https://docs.phpmyadmin.net/ja/latest/faq.html#the-number-of-rows-for-innodb-tables-is-not-correct

「概数しか返ってきません。」

もし合計件数をピッタリ求めようとしたら時間がかかりすぎます。phpMyAdminの表示性能を高めるために概算だけ表示してるみたいです。

上記の説明の通り、変更もできるみたい

正確な合計件数の確認するには…?

もし正しい合計件数を知りたいなら…

テーブル一覧の行をクリックするだけです。

▼ この部分をクリックすると…

phpMyAdminで正しい合計件数を知りたいなら、テーブル一覧の行をクリック

▼ 本当の合計件数を表示してくれる

この画像のように本当の合計件数を表示してくれる

ちゃんと100万件と表示されてる。

あるいはクエリ実行でもOKですね。

▼ もっとも基礎的なクエリの1つ

ただしい合計行数を表示する方法を知ってないと、過去の僕のように「あれ?クエリ実行がおかしい?」みたいに勘違いをしてしまいます。

この方法は知ってて損ありません

ちなみに $cfg['MaxExactCount'] の変更方法

もちろんphpMyAdminの設定変更もできます。

単純に $cfg['MaxExactCount']  の値を変えるだけです。

▼ この定数の概要

InnoDB テーブルにおいて、どの程度の大きさのテーブルまで SELECT COUNT で正確な行数を取得するかを指定します。SHOW TABLE STATUS によって返される概算の行数が設定した値より小さい場合は SELECT COUNT が使われますが、そうでない場合はこの概算数が使われます。バージョン 4.8.0 で変更: パフォーマンスの理由から、デフォルト値は 50000 に下げられました。

引用元 : https://docs.phpmyadmin.net/ja/latest/config.html#cfg_MaxExactCount

50万件が正確な行数取得できる上限です。

この値の変更方法、次のような手順です。

  1. config.inc.phpを開く
    phpMyAdminのインストール先にconfig.inc.phpという設定ファイルが見つかるはず。ちなみにyumでインストールした場合の場所は /etc/phpMyAdmin/config.inc.php になる
  2. MaxExactCountの値を追加/変更

    開いたら $cfg['MaxExactCount']  のある箇所を探して値変更。恐らくデフォルトだと見つからないので、その場合は以下のように新規追加する

  3. MySQLを再起動する
    設定が反映されて合計件数が正確に表示される

このような手順で変更できます。

実際に50万件⇒200万件と拡張したら、100万レコードあっても最後のレコードまできっちり表示してくれました。ただパフォーマンスは若干落ちます。

以上、phpMyAdminで合計件数の問題でした。

少なく表示されるのは仕様です。

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください