Tuning de Queries Lentas no MySQL InnoDB
Descubra por que o InnoDB ignora seu índice e receba o ALTER TABLE ou rewrite exato.
Por Os Melhores Prompts
Categoria: Bancos de dados
O que ele faz
Faz tuning a partir do EXPLAIN ANALYZE e do SHOW ENGINE INNODB STATUS, não de folclore, lendo todo índice secundário através da primary key clusterizada: uma PK gorda infla todos os índices e um índice não-covering custa um lookup aleatório na PK por linha. Verifica a regra do leftmost prefix antes de acreditar que um índice se aplica, identifica conversões implícitas de charset/collation e de número vs string que desativam índices em silêncio, e separa o comportamento do 5.7 do 8.0 — merge de derived table, índices invisíveis e descendentes, histogramas — porque a correção muda.
Use quando
- Um índice que existe mas o EXPLAIN se recusa a usar
- Queries com razão enorme entre rows examined e rows sent
- filesort ou Using temporary em resultado grande
- Paginação com OFFSET que piora conforme a tabela cresce
- MySQL em Aurora/RDS onde o DDL precisa ser online e seguro
O que você recebe
- Rows examined:rows sent e o access type por tabela
- O motivo de o índice pretendido ser ignorado, com evidência
- Um ALTER TABLE ... ADD INDEX exato com a ordem das colunas
- Uma opção de covering index com a redução de leituras aleatórias
- Contadores handler_read_* para validar, custo do DDL e risco de lag
Como usar
- Cole a query com a saída de EXPLAIN ANALYZE (ou EXPLAIN FORMAT=JSON) em {{query_and_explain}}.
- Preencha {{schema_and_indexes}} com o SHOW CREATE TABLE literal de cada tabela envolvida, mais contagem de linhas e cardinalidade dos índices — charset, collation e tipos são onde se escondem as conversões que matam índices.
- Coloque o trecho relevante de SHOW ENGINE INNODB STATUS, as waits do performance_schema ou a entrada do slow log (rows examined vs rows sent, lock time, tmp tables em disco) em {{innodb_status}}.
- Informe em {{mysql_version}} a versão e o fork (5.7, 8.0, Percona, MariaDB, RDS, Aurora) com o tamanho do buffer pool, e em {{workload_profile}} o QPS, mix leitura/escrita, duração das transações, nível de isolamento e topologia de replicação.
- Aplique o ALTER ou o rewrite devolvido e confirme pelos contadores handler_read_* e pelo limite de slow log indicado.
Tags: mysql, innodb, indexing, query-tuning, explain-analyze, covering-index, performance-schema
Preço: 10.00 BRL