"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso acelerar uma consulta lenta "SELECT COUNT(*)...\" com uma cláusula WHERE no MySQL?

Como posso acelerar uma consulta lenta "SELECT COUNT(*)...\" com uma cláusula WHERE no MySQL?

Publicado em 2024-11-12
Navegar:644

How Can I Speed Up a Slow \

Otimizando "SELECT COUNT(*)..." com cláusula Where

O problema em questão diz respeito a um "SELECT COUNT" significativamente lento (*)" no MySQL, mesmo quando uma cláusula "WHERE" é aplicada. Para enfrentar esse desafio, é crucial entender o mecanismo de armazenamento do MySQL.

Chaves primárias em cluster

InnoDB, o mecanismo de armazenamento usado neste caso, utiliza chaves primárias em cluster. Isso significa que a chave primária é armazenada junto com a linha de dados nas mesmas páginas de dados, em vez de em páginas de índice separadas. Conseqüentemente, executar uma varredura de intervalo em uma chave primária agrupada requer a varredura de todas as linhas, incluindo seus valores de coluna potencialmente amplos. A tabela em questão contém uma coluna TEXT, agravando ainda mais o problema de desempenho.

Estratégias de otimização

Para otimizar esta consulta, considere as seguintes estratégias:

  1. Optimize Table: Executar "OPTIMIZE TABLE" garante que as páginas de dados sejam fisicamente classificadas em ordem. Essa otimização pode melhorar potencialmente o desempenho de varreduras de intervalo em chaves primárias agrupadas.
  2. Criar um índice adicional: Considere criar um índice não primário somente na coluna "change_event_id". Isso criará uma cópia dessa coluna nas páginas de índice, que é significativamente mais rápida de verificar em comparação com a chave primária agrupada. Verifique o plano de explicação após criar o índice para confirmar sua utilização.

Sugestão Adicional

Para melhorar ainda mais o desempenho, considere modificar a coluna "change_event_id" para será "BIGINT UNSIGNED" se aumentar de zero. Essa mudança pode resultar em requisitos de armazenamento reduzidos e melhor desempenho.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3