简单解析MySQL中的cardinality异常 |
本文标签:MySQL 前段时间,一大早上,就收到报警,警告php-fpm进程的数量超过阈值 。最终发现是一条sql没用到索引,导致执行数据库查询慢了,最终导致php-fpm进程数增加 。最终通过analyze table feed_comment_info_id_0000 命令更新了Cardinality ,才能再次用到索引 。 select id from feed_comment_info_id_0000 where obj_id=101 and type=1; 索引信息: show index from feed_comment_info_id_0000 +---------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +---------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | feed_comment_info_id_0000 | 0 | PRIMARY | 1 | id | A | 6216 | NULL | NULL | | BTREE | | | feed_comment_info_id_0000 | 1 | obj_type | 1 | obj_id | A | 6216 | NULL | NULL | | BTREE | | | feed_comment_info_id_0000 | 1 | obj_type | 2 | type | A | 6216 | NULL | NULL | YES | BTREE | | | feed_comment_info_id_0000 | 1 | user_id | 1 | user_id | A | 6216 | NULL | NULL | | BTREE | | +---------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 5 rows in set (0.00 sec) 通过explian查看时,发现sql用的是主键PRIMARY,而不是obj_type索引 。通过show index 查看索引的Cardinality值,发现这个值是实际数据的两倍 。感觉这个Cardinality值已经不正常,因此通过analyzea table命令对这个值从新进行了计算 。命令执行完毕后,就可用使用索引了 。 Cardinality解释 |