您好,欢迎来到高士教育。
搜索
您的当前位置:首页简单解析MySQL中的cardinality异常_MySQL

简单解析MySQL中的cardinality异常_MySQL

来源:高士教育


前段时间,一大早上,就收到报警,警告php-fpm进程的数量超过阈值。最终发现是一条sql没用到索引,导致执行数据库查询慢了,最终导致php-fpm进程数增加。最终通过analyze table feed_comment_info_id_0000 命令更新了Cardinality ,才能再次用到索引。
排查过程如下:
sql语句:

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解释
官方文档的解释:
An estimate of the number of unique values in the index. This is updated by running ANALYZE TABLE or myisamchk -a. Cardinality is counted based on statistics stored as integers, so the value is not necessarily exact even for small tables. The higher the cardinality, the greater the chance that MySQL uses the index when doing
总结一下:
1、它代表的是索引中唯一值的数目的估计值。如果是myisam引擎,这个值是一个准确的值。如果是innodb引擎,这个值是一个估算的值,每次执行show index 时,可能会不一样
2、创建Index时(primary key除外),MyISAM的表Cardinality的值为null,InnoDB的表Cardinality的值大概为行数;
3、值的大小会影响到索引的选择
4、创建Index时,MyISAM的表Cardinality的值为null,InnoDB的表Cardinality的值大概为行数。
5、可以通过Analyze table来更新一张表或者mysqlcheck -Aa来进行更新整个数据库
6、可以通过 show index 查看其值

高士教育还为您提供以下相关内容希望对您有帮助:

mysql中如何查看优化器优化后的执行计划

HINT简单来说就是在某些特定的场景下人工协助MySQL优化器的工作,使她生成最优的执行计划。一般来说,优化器的执行计划都是最优化的,不过在某些特定场景下,执行计划可能不是最优化。比如:表t1经过大量的频繁更新操作,(UPDATE,DELETE,INSERT),cardinality已经很不准确了,这时候刚好执行了一条SQL

mysql索引表中的cardinality内容有什么含义

索引中的列序列号,从1开始。· Column_name列名称。· Collation · Cardinality MySQL索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就...

一次业务问题对 ES 的 cardinality 原理探究

在本业务场景中,对商户订单进行统计属于精确统计场景,因此 cardinality 操作不适合。由于业务的 orderId 不会重复,理论上在 ES 集群中每个记录的 orderId 都是唯一的,因此可以直接使用 ES 的 count 操作进行订单数统计汇总。综上所述,通过对 cardinality 原理的深入探究,我们明确了其使用场景和...

数据库在什么情况下适合添加索引

1、表的某个字段值得离散度越高,该字段越适合选作索引的关键字。主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。尤其是在主键字段创建索引时,cardinality(基数,集的势)的值就等于该表的行数。MySQL在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约...

mysql数据库如何优化?谁能给出点具体的解决方案?

5、show create table:查看表的详细的创建语句,便于用户对表进行优化 6、show indexes :产看表的所有索引,show indexes from table_name,同样也可以从information_schema.statistics表中获得同样的信息。cardinality列很重要,表示数据量。7、show tables status: 查看数据库表的底层大小以及表结构,同样...

mysql查看索引命令

在 MySQL 中,查看索引信息是优化查询性能的重要步骤。以下是常用的索引查看方法及具体操作示例:1. 使用 SHOW INDEX 命令功能:直接显示表的索引定义及结构信息。语法:SHOW INDEX FROM 表名;输出字段说明:Index_Name:索引名称。Column_Name:索引包含的列名。Sub_part:前缀索引的列前缀长度(如 ...

一文搞懂各种数据库SQL执行计划:MySQL、Oracle等

我们先给出在各种数据库中查看执行计划的一个简单汇总:MySQL 执行计划MySQL中获取执行计划的方法很简单,就是在SQL语句的前面加上EXPLAIN关键字:执行该语句将会返回一个表格形式的执行计划,包含了12列信息。MySQL中的EXPLAIN支持SELECT、DELETE、INSERT、REPLACE以及UPDATE语句。接下来,我们要做的就是理解...

MySQL索引使用有哪些

1. SQL 执行流程看一个问题,在下面这个表 T 中,如果我要执行 select * from T where k between 3 and 5; 需要执行几次树的搜索操作,会扫描多少行?mysql> create table T ( -> ID int primary key, -> k int NOT NULL DEFAULT 0, -> s varchar(16) NOT NULL DEFAULT '', -> index k(k))...

PostgreSQL与MySQL相比,优势何在?

为了说明PostgreSQL的功能,下面从“从Oracle迁移到Mysql之前必须知道的50件事”简要对比一下PostgreSQL数据库与MySQL数据库之间的差异。 从Oracle迁移到Mysql会面对的50件难事 1、对子查询的优化表现不佳。(PostgreSQL可解决) 2、对复杂查询的处理较弱。(PostgreSQL可解决) 3、查询优化器不够成熟。(PostgreSQL可解决) ...

索引(三)MySQL SHOW INDEX

1. "Table":表名。2. "Non_unique":0代表唯一索引,1表示允许重复值。3. "Key_name":索引名称,相同名称代表同一索引。4. "Seq_in_index":索引列序号,从1开始。5. "Column_name":索引列名。6. "Collation":存储方式,字符排序规则。7. "Cardinality":唯一值估计数,判断索引选择性。...

Copyright © 2019- guanggaoshi.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务