phpMyAdminが読み込まれるたびにInnoDBでCOUNT(*)


8

innodbが遅いのは既知の問題です

SELECT count(*) FROM Table

したがって、私はそれを避けました。しかし、phpmyadminにログインするたびにcount(*)、19k行のinnodbテーブルが自動的に実行され、実行に最大1分かかることがあります。それでもcount(*)、400万行を含む他のinnodbテーブルでは、このような処理は開始されません。

phpmyadminの別の手掛かりとして、[レコード]列の下にある、19k行のテーブルのレコード数は正確な値を示していますが、400万行のテーブルはおよその値を示しています。

私はinnodbテーブルが行数の見積もりを与えることを理解しています。しかし、この例では1万9千行の小さなテーブルの場合、phpmyadmin count(*)は単に見積もりを行うのではなく、を行うことにしました。

質問は、phpmyadminが私のinnodbテーブルでこのようなカウントを実行しないようにする方法はありますか?phpmyadmin画面を更新するたびに、高額な行数を計算する代わりに、見積もりを出すだけでかまいません。


私が答えを見つけたと思います。$ cfg ['MaxExactCount'] = 20000があります。phpmyadmin設定で。20kを超える行のみが推定を示します。次の質問は、$ cfg ['MaxExactCount']をどこで編集するかです。

@Kenny、単純に値20000を小さい数値で上書きします。たとえば300、ファイルを保存し、phpmyadminを更新すると、準備が整います。
Pacerier、2015

回答:


3

config.inc.phpを編集し、MaxExactCountの設定を変更します。

$ cfg ['MaxExactCount']
    タイプ:整数
    デフォルト値:500000

InnoDBテーブルの場合、phpMyAdminが取得するテーブルのサイズを決定します 
SELECT COUNTを使用した正確な行数。返されたおおよその行数
SHOW TABLE STATUSがこの値よりも小さい場合、SELECT COUNTが使用されます。 
それ以外の場合は、おおよその数が使用されます。

リンクダウン............
Pacerier、2015

@Pacerier:より良いリンク。
Mike Sherrill 'Cat Recall'

1
ああ、あなたは私の答えを冗長にしました.......
Pacerier

1

phpMyAdminは、推定行数が設定されたしきい値(デフォルトはバージョンに応じて500k)内にある場合にのみ実際に 実行select count(*)します。

$cfg['MaxExactCount']

InnoDBテーブルの場合、phpMyAdminがを使用して正確な行数を取得するテーブルの大きさを決定しますSELECT COUNT。によって返される概算の行数SHOW TABLE STATUSがこの値よりも小さいSELECT COUNT場合は、が使用されます。それ以外の場合は、概数が使用されます。

意味select count(*)のないs を回避するには、しきい値を小さい値に設定するだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.