Em tabelas com dezenas de milhões de linhas, operações como COUNT(*) e varreduras completas de índice têm alto custo. O MySQL envia cada linha para a camada SQL antes do processamento, o que gera grande sobrecarga de CPU e alta latência nas consultas. O recurso Fast traverse elimina esse gargalo ao delegar a execução à camada do mecanismo de armazenamento InnoDB. A travessia das páginas utiliza o índice escolhido pelo otimizador, e não necessariamente a chave primária.
Versões compatíveis
O Fast traverse exige PolarDB for MySQL 8.0 em uma das seguintes versões de revisão:
8.0.1.1.5 ou posterior
8.0.2.2.0 ou posterior
Para verificar a versão do seu cluster, consulte Consultar a versão do mecanismo.
Funcionamento
O MySQL Community Edition 8.0.13 não executa COUNT(*) diretamente no InnoDB; ele envia todas as linhas para a camada SQL para contagem. Já o MySQL Community Edition 8.0.18 introduziu a travessia no nível de página no InnoDB, mas sempre utiliza o índice de chave primária, independentemente da escolha do otimizador.
O Fast traverse supera ambas as limitações:
Percorre as páginas do InnoDB usando o índice selecionado pelo otimizador, em vez da chave primária
Evita bloqueios prolongados de página e a sobrecarga de restauração de versões do Multi-Version Concurrency Control (MVCC) causados por consultas à tabela
Esse recurso vem ativado por padrão em todos os clusters compatíveis do PolarDB for MySQL, sem necessidade de configuração adicional.
Verifique se o Fast traverse está ativo
Execute EXPLAIN na consulta e analise a saída. Neste exemplo, usamos a tabela lineitem do TPC-H:
mysql> EXPLAIN SELECT COUNT(*) FROM lineitem\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: lineitem
partitions: NULL
type: index
possible_keys: NULL
key: i_l_shipdate
key_len: 4
ref: NULL
rows: 59440464
filtered: 100.00
Extra: Using index
Desempenho
Os resultados abaixo foram obtidos com o benchmark TPC-H no fator de escala 10, com innodb_parallel_read_threads definido como 1. Clusters PolarDB com Fast traverse apresentam desempenho superior ao MySQL Community Edition 8.0.13 e 8.0.18.

Perguntas frequentes
**Qual é o valor padrão de innodb_parallel_read_threads no PolarDB for MySQL?**
O valor padrão é 0. Para alterá-lo, consulte Configure parâmetros de cluster e nó.