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

Por que o desempenho das consultas do MySQL é tão ruim ao usar um índice CHAR/VARCHAR?


Claramente, o problema é que a consulta está fazendo uma varredura de índice. A abordagem alternativa seria fazer duas pesquisas de índice, para o primeiro e o último valores que são iguais e, em seguida, usar metainformações no índice para o cálculo. Com base em suas observações, o MySQL faz as duas coisas.

O resto desta resposta é especulação.

A razão pela qual o desempenho é "apenas" 300 vezes mais lento, em vez de 200.000 vezes mais lento, é devido à sobrecarga na leitura do índice. Na verdade, a verificação das entradas é bastante rápida em comparação com outras operações necessárias.

Há uma diferença fundamental entre números e strings quando se trata de comparações. O mecanismo pode apenas olhar para as representações de bits de dois números e reconhecer se são iguais ou diferentes. Infelizmente, para strings, você precisa levar em consideração a codificação/colação. Acho que é por isso que precisa olhar para os valores.

É possível que se você tivesse 216.000 cópias de exatamente a mesma string, então o MySQL seria capaz de fazer a contagem usando metadados no índice. Em outras palavras, o indexador é inteligente o suficiente para usar metadados para comparações de igualdade exatas. Mas não é inteligente o suficiente para levar em conta a codificação.