COUNT (*) no InnoDB sempre que o phpMyAdmin carregar


8

É um problema conhecido que o innodb é lento

SELECT count(*) FROM Table

Por isso evitei isso. Mas percebo que sempre que eu fizer login no phpmyadmin, ele executará automaticamente uma count(*)tabela da minha innodb com 19k linhas, o que pode levar até um minuto para ser executado. No entanto, ele não é iniciado count(*)na outra tabela innodb com 4 milhões de linhas.

Outra pista, no phpmyadmin, na coluna Registros, o número de registros da tabela de 19 mil linhas está mostrando o valor exato, enquanto a tabela de 4 milhões de linhas mostra um aprox.

Eu entendo que a tabela innodb fornece uma estimativa da contagem de linhas. Mas parece que para uma tabela menor, neste caso com 19k linhas, o phpmyadmin decide fazer um em count(*)vez de apenas dar uma estimativa.

A pergunta é: existe uma maneira de impedir que o phpmyadmin faça essa contagem na minha tabela innodb? Não há problema em apenas fazer uma estimativa em vez de fazer uma contagem de linhas cara sempre que atualizo minha tela do phpmyadmin.


Acho que encontrei a resposta. Existe um $ cfg ['MaxExactCount'] = 20000; nas configurações do phpmyadmin. Somente linhas com mais de 20k fornecerão estimativas. Minha próxima pergunta é: onde eu edito $ cfg ['MaxExactCount']?

@ Kenny, simplesmente sobrescreva o valor 20000com um número menor, por exemplo 300, salve o arquivo, atualize o phpmyadmin e você estará pronto para começar.
Pacerier 9/04

Respostas:


3

Edite config.inc.php e altere a configuração para MaxExactCount .

$ cfg ['MaxExactCount']
    Tipo: inteiro
    Valor padrão: 500000

Para tabelas InnoDB, determina como tabelas grandes o phpMyAdmin deve obter o 
contagem exata de linhas usando SELECT COUNT. Se a contagem aproximada de linhas retornada
por SHOW TABLE STATUS é menor que esse valor, SELECT COUNT será usado, 
caso contrário, a contagem aproximada será usada.

Link down ............
Pacerier

@ Pacerier: Melhor link.
Mike Sherrill 'Cat Recall'

11
Ah, agora você fez a minha resposta redundante .......
Pacerier

1

O phpMyAdmin só fará um valor real select count(*) se o número estimado de linhas estiver dentro do limite definido (o padrão é 500k, dependendo da sua versão):

$cfg['MaxExactCount']

Para tabelas InnoDB, determina como tabelas grandes o phpMyAdmin deve obter a contagem exata de linhas usando SELECT COUNT. Se a contagem aproximada de linhas retornada por SHOW TABLE STATUSfor menor que esse valor, SELECT COUNTserá usada, caso contrário, a contagem aproximada será usada.

Basta definir o limite para um número menor para evitar select count(*)s sem sentido .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.