Resumo : neste tutorial, você aprenderá sobre a cardinalidade do índice MySQL e como visualizar a cardinalidade do índice usando o SHOW INDEXES
comando.
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 INDEXES
comando.
Por exemplo, a instrução a seguir retorna as informações de índice da orders
tabela 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 orderNumber
coluna tem cardinalidade de índice de 326, que é alta porque o número de linhas na tabela de pedidos é 326.
A customerNumer
coluna possui uma cardinalidade de índice de 98, o que significa que pode haver 98 valores exclusivos na customerNumber
coluna.
Para verificar isso, você pode contar valores distintos na customerNumber
coluna:
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.