Cardinalidade do índice MySQL

Resumo : neste tutorial, você aprenderá sobre a cardinalidade do índice MySQL e como visualizar a cardinalidade do índice usando o SHOW INDEXEScomando.

Introdução à cardinalidade do índice MySQL

A cardinalidade do índice refere-se à exclusividade dos valores armazenados em uma coluna específica dentro de um índice .

O MySQL gera a cardinalidade do índice com base em estatísticas armazenadas como números inteiros, portanto, os valores podem não ser necessariamente exatos.

O otimizador de consulta usa a cardinalidade do índice para gerar um plano de consulta ideal para uma determinada consulta. Ele também usa a cardinalidade do índice para decidir se deve usar o índice ou não nas operações de junção .

Se o otimizador de consulta escolher o índice com baixa cardinalidade, poderá ser mais eficaz do que verificar linhas sem usar o índice.

Os termos cardinalidade “alta” e “baixa” são relativos. Normalmente, eles são avaliados em comparação com o número total de linhas de uma tabela.

Mostrando cardinalidade do índice

Para visualizar a cardinalidade do índice, você usa o SHOW INDEXEScomando.

Por exemplo, a instrução a seguir retorna as informações de índice da orderstabela no banco de dados de amostra com a cardinalidade (*):

mysql> SHOW INDEXES FROM orders;
+--------+------------+----------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table  | Non_unique | Key_name       | Seq_in_index | Column_name    | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible |
+--------+------------+----------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| orders |          0 | PRIMARY        |            1 | orderNumber    | A         |         326 |     NULL |   NULL |      | BTREE      |         |               | YES     |
| orders |          1 | customerNumber |            1 | customerNumber | A         |          98 |     NULL |   NULL |      | BTREE      |         |               | YES     |
+--------+------------+----------------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
2 rows in set (0.01 sec)Linguagem de código:  PHP  ( php )

(*) role para a direita da saída e você não vê a coluna de cardinalidade do índice para ver a cardinalidade do índice.

A tabela de pedidos possui dois índices PRIMARY e customerNumber.

A   orderNumbercoluna tem cardinalidade de índice de 326, que é alta porque o número de linhas na tabela de pedidos é 326.

A   customerNumercoluna possui uma cardinalidade de índice de 98, o que significa que pode haver 98 valores exclusivos na customerNumbercoluna.

Para verificar isso, você pode contar valores distintos na customerNumbercoluna:

SELECT COUNT(DISTINCT customerNumber) 
FROM orders;

Saída:

+--------------------------------+
| COUNT(DISTINCT customerNumber) |
+--------------------------------+
|                             98 |
+--------------------------------+
1 row in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Se uma coluna tiver alta cardinalidade, provavelmente será uma boa candidata para indexação. Por exemplo, a seguinte consulta que recupera pedidos de um cliente provavelmente se beneficiará do índice, já que a cardinalidade é relativamente alta:

SELECT * FROM orders 
WHERE customerNumber = 103;

Resumo

  • A cardinalidade do índice mede a exclusividade dos valores em uma coluna de índice específica.
  • MySQL usa cardinalidade de índice para otimizar o desempenho do banco de dados e a eficiência das consultas.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *