Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Varredura de tabela completa cara em selecionar tudo sem condição


Consulte o link abaixo para mais detalhes

https://dev.mysql.com/doc /refman/8.0/en/table-scan-avoidance.html

a causa da verificação completa da tabela está abaixo

  • A tabela é tão pequena que é mais rápido realizar uma varredura de tabela do que se preocupar com uma pesquisa de chave. Isso é comum para tabelas com menos de 10 linhas e um comprimento de linha curto.

  • Não há restrições utilizáveis ​​na cláusula ON ou WHERE para colunas indexadas.

  • Você está comparando colunas indexadas com valores constantes e o MySQL calculou (com base na árvore de índice) que as constantes cobrem uma parte muito grande da tabela e que uma varredura de tabela seria mais rápida

  • Você está usando uma chave com baixa cardinalidade (muitas linhas correspondem ao valor da chave) por meio de outra coluna. Neste caso, o MySQL assume que usando a chave ele provavelmente fará muitas pesquisas de chave e que uma varredura de tabela seria mais rápida.

para evitar o uso de varredura de tabela completa abaixo:

  • Use ANALYZE TABLE tbl_name para atualizar as distribuições de chaves para a tabela verificada.

  • Use FORCE INDEX para a tabela escaneada para informar ao MySQL que as varreduras de tabela são muito caras comparadas ao uso do índice fornecido:

    por exemplo. SELECT * FROM t1, t2 FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;