清晨,闹钟在早上收到警告,php-fpm
进程数超过阈值,最后
发现是一个SQL不使用索引,造成数据库
查询慢的
执行,最终导致在php-fpm进程数量的增加,基数是更新的分析表feed_comment_info_id_0000
命令再次使用指数。
调查过程如下:
SQL语句:
选择ID从feed_comment_info_id_0000哪里obj_id = 101型= 1;
索引信息:
显示指数从feed_comment_info_id_0000
+ + + + --------------------------- ------------ ---------- -------------- + ------------- + + + + ----------- ------------- ---------- -------- + + + + ------ ------------ ---------
表non_unique key_name | | | | seq_in_index column_name整理基数| | | | sub_part |填充空index_type评论| | | |
+ + + + --------------------------- ------------ ---------- -------------- + ------------- + + + + ----------- ------------- ---------- -------- + + + + ------ ------------ ---------
| feed_comment_info_id_0000 | 0 |初级| 1 | ID |一| 6216 |空|空| | btree | |
| feed_comment_info_id_0000 | 1 | obj_type | 1 | obj_id |一| 6216 |空|空| | btree | |
| feed_comment_info_id_0000 | 1 | obj_type | 2 |型|一| 6216 |空值是B树| | | | |
| feed_comment_info_id_0000 | 1 | user_id | 1 | user_id |一| 6216 |空|空| | btree | |
+ + + + --------------------------- ------------ ---------- -------------- + ------------- + + + + ----------- ------------- ---------- -------- + + + + ------ ------------ ---------
5行(0秒)
当通过解释,发现SQL是使用主键小学,不obj_type指标。看着显示指数在指数的基数值,发现这个值是两倍的实际数据。它认为,基数值是不正常的,所以价值是从新分析表命令计算。当命令完成后,可使用索引。
基数的解释
官方
文件的解释:
索引中唯一值的个数的估计。这是通过
运行分析表或myisamchk的基数是计算基于存储整型数据更新,所以价值不一定精确甚至小表。基数越高,MySQL在做索引时使用索引的机会就越大。
总结:
1。它代表了索引中的唯一值的数量的估计值。如果是MyISAM引擎,这个值是一个准确的价值。如果是InnoDB引擎,这个值是一个估计值,它可能是不同的每一次显示指标执行。
2。在
创建索引的时候(除了主键),MyISAM表的基数值为空,而InnoDB表的基数的价值可能是线数;
3,值的大小
影响索引的选择。
4、在创建索引的时候,对MyISAM表的基数值为空,而InnoDB表的基数的价值可能是线数。
5,更新一个表或mysqlcheck AA可以通过分析表更新整个数据库
6,可以通过显示索引看到它的值。