美文网首页
mysql-索引篇-Cardinality

mysql-索引篇-Cardinality

作者: tianlang136520 | 来源:发表于2018-12-20 14:16 被阅读9次
官方文档的解释:
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 joins.

总结下来cardinality列的值有以下特性:

    1. 列值代表的是此列中存储的唯一值的个数(如果此列为primary key 则值为记录的行数)
    2. 列值只是个估计值,并不准确。(我用的innodb数据库实际的例子中这个值也不是太准确)
    3. 列值不会自动更新,需要通过analyze table来进行更新。
    4. 列值的大小影响join时是否选用这个index的判断。
    5. 初建index时,MyISAM的表cardinality的值为null,InnoDB的表cardinality的值大概为行数。
    6. MyISAM与InnoDB对于cardinality的计算方式不同。

本质:Cardinality表示是某列作为索引,不重复记录数的预估值。

        1、Cardinality/n_rows_in_table 应该尽可能==1,如果非常小,那用户考虑🙅不要建这个索引了。
        

本地测试:

CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
`name` varchar(64) CHARACTER SET utf8 NOT NULL COMMENT '名字',
`sex` int(4) DEFAULT NULL,
`age` int(11) NOT NULL COMMENT '年龄',
`tid` int(11) NOT NULL COMMENT 'tid',
`leaveamount` decimal(10,0) DEFAULT NULL COMMENT '剩余可用额度',
`updatedate` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新',
`lastdate` date DEFAULT NULL,
`refid` varchar(50) CHARACTER SET latin1 DEFAULT NULL,
`supplier_name` varchar(255) CHARACTER SET latin1 DEFAULT NULL COMMENT '供应商名称',
`uuid` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_student_uuid` (`uuid`),
UNIQUE KEY `UK_student_refid` (`refid`)
) ENGINE=InnoDB AUTO_INCREMENT=100202 DEFAULT CHARSET=utf8mb4

mysql> select count(1) from student;
+----------+
| count(1) |
+----------+
|   100201 |
+----------+
1 row in set (0.08 sec)
mysql> show index from student;
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name         | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          0 | PRIMARY          |            1 | id          | A         |       36722 |     NULL | NULL   |      | BTREE      |         |               |
| student |          0 | UK_student_uuid  |            1 | uuid        | A         |       36540 |     NULL | NULL   |      | BTREE      |         |               |
| student |          0 | UK_student_refid |            1 | refid       | A         |       36722 |     NULL | NULL   | YES  | BTREE      |         |               |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.02 sec)

mysql> analyze local table student;
+---------------+---------+----------+----------+
| Table         | Op      | Msg_type | Msg_text |
+---------------+---------+----------+----------+
| mysql.student | analyze | status   | OK       |
+---------------+---------+----------+----------+
1 row in set (0.02 sec)

mysql> show index from student;
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name         | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          0 | PRIMARY          |            1 | id          | A         |       99552 |     NULL | NULL   |      | BTREE      |         |               |
| student |          0 | UK_student_uuid  |            1 | uuid        | A         |       96697 |     NULL | NULL   |      | BTREE      |         |               |
| student |          0 | UK_student_refid |            1 | refid       | A         |       99552 |     NULL | NULL   | YES  | BTREE      |         |               |
+---------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

强制刷新Cardinality语句

analyze local table net_user;

相关文章

  • mysql-索引篇-Cardinality

    总结下来cardinality列的值有以下特性: 1. 列值代表的是此列中存储的唯一值的个数(如果此列为prima...

  • 05 MySQL-初识MySQL-索引-下

    04 MySQL-初识MySQL-索引-上 篇中介绍了InnoDB索引的数据结构模型以及索引维护。本篇继续针对My...

  • 第25期:索引设计(索引的基数与可选择性)

    这篇主要介绍 MySQL 索引的 Cardinality 值(基数)以及索引的可选择性。 索引基数值 索引基数的含...

  • MYSQL-索引&SQL优化-IM

    索引选择策略: 索引的选择性(Selectivity),是指不重复的索引值(也叫基数,Cardinality)与表...

  • mysql-索引

    mysql-索引 按数据结构分类 B树索引-NOSQL使用较多 B+树索引 hash索引-KV数据库上比较常见 位...

  • MYSQL-索引

    MYSQL-索引 概述 用来加快查询的技术很多,其中最重要的是索引。通常索引能够快速提高查询速度。如果不适用索引,...

  • High cardinality下对持续写入的Elasticse

    High cardinality下对持续写入的Elasticsearch索引进行聚合查询的性能优化 背景 最近使用...

  • MYSQL-索引

    1.mysql的索引分为单列索引(主键索引-不允许空值,唯一索引-允许空值,普通索引)和组合索引. 单列索引:一...

  • mysql-索引

    索引 索引是指一种数据库储存时,是否对数据进行处理,得到的一个类似于目录一样的快速查找的对象使用下列操作时,会用到...

  • MySQL-索引

    索引的作用 索引有点像目录,目录就是为了提高查找效率的。数据库中存储着成千上万条数据,如果没有索引,查找数据会变得...

网友评论

      本文标题:mysql-索引篇-Cardinality

      本文链接:https://www.haomeiwen.com/subject/ludykqtx.html