COUNT (*) на InnoDB всякий раз, когда phpMyAdmin загружается


8

Известно, что innodb работает медленно

SELECT count(*) FROM Table

Поэтому я избегал этого. Но я заметил, что всякий раз, когда я вхожу в phpmyadmin, он автоматически выполняет count(*)для моей таблицы innodb 19 строк, что может занять до минуты. Тем не менее, он не инициирует это count(*)для другой таблицы innodb с 4 миллионами строк.

Другая подсказка, в phpmyadmin, в столбце «Записи», число записей для таблицы из 19 тысяч строк показывает точное значение, тогда как в таблице из 4 миллионов строк указано приблизительное значение.

Я понимаю, что таблица innodb дает оценку количества строк. Но похоже, что для таблицы меньшего размера, в данном случае с 19k строками, phpmyadmin решает сделать count(*)вместо того, чтобы просто давать оценку.

Вопрос в том, есть ли способ остановить phpmyadmin от такого подсчета в моей таблице innodb? Можно просто давать оценку, а не делать дорогостоящий подсчет строк всякий раз, когда я обновляю свой экран phpmyadmin.


Думаю, я нашел ответ. Существует $ cfg ['MaxExactCount'] = 20000; в настройках phpmyadmin. Только строки больше чем 20 КБ дадут оценки. Мой следующий вопрос: где мне отредактировать $ cfg ['MaxExactCount']?

@Kenny, просто перезапишите значение 20000меньшим числом, например 300, сохраните файл, обновите phpmyadmin и все готово.
Pacerier

Ответы:


3

Отредактируйте config.inc.php и измените настройку MaxExactCount .

$ CFG [ 'MaxExactCount']
    Тип: целое число
    Значение по умолчанию: 500000

Для таблиц InnoDB определяет размер таблиц, которые phpMyAdmin должен получить 
точное количество строк с помощью SELECT COUNT. Если приблизительное количество строк считается возвращенным
по SHOW TABLE STATUS меньше, чем это значение, будет использоваться SELECT COUNT, 
в противном случае будет использовано приблизительное количество.

Ссылка вниз ............
Pacerier

@Pacerier: Лучшая ссылка.
Майк Шеррилл 'Cat Recall'

1
Ах, теперь вы сделали мой ответ излишним .......
Pacerier

1

phpMyAdmin будет выполнять только факт, select count(*) если предполагаемое количество строк находится в пределах установленного порога (по умолчанию 500k в зависимости от вашей версии):

$cfg['MaxExactCount']

Для таблиц InnoDB определяет, для каких больших таблиц phpMyAdmin должен получать точное количество строк, используя SELECT COUNT. Если приблизительное количество строк, возвращаемое значением SHOW TABLE STATUSменьше, чем это значение, SELECT COUNTбудет использовано, в противном случае будет использовано приблизительное количество.

Просто установите порог на меньшее число, чтобы избежать бессмысленных select count(*)с.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.