MySQL Index Cardinality

摘要:在本教程中,您将了解 MySQL 索引基数以及如何使用SHOW INDEXES命令查看索引基数。

索引基数是指索引内指定列中存储的值的唯一性。

MySQL 根据存储为整数的统计信息生成索引基数,因此该值可能不一定准确。

查询优化器使用索引基数为给定查询生成最佳查询计划。它还使用索引基数来决定在连接操作中是否使用索引。

如果查询优化器选择基数较低的索引,可能比不使用索引扫描行更有效。

要查看索引基数,可以使用SHOW INDEXES命令。

例如,以下语句返回示例数据库orders表的索引信息,基数为(*):

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)Code language: PHP (php)

(*) 滚动到输出右侧以查看索引基数。

在输出中, orderNumber列的PRIMARY KEY显示表有 326 个唯一值,而customerNumer列只有 98 个不同值。

如前所述,索引统计信息只是近似值,可能并不代表表中行的实际大小。要生成更准确的统计信息,可以使用ANALYZE TABLE命令。

本教程有帮助吗?