基数在 MySQL 中是什么? 请用简单的非技术语言解释。
If a index detail of any table displays the cardinality of a field say group_id as 11, then what does that mean?
group_id
Wikipedia summarizes SQL 中的基数 as follows:
在 SQL(SQL)中,术语 枢机主教是指包含在 database 桌子的特定列(属性)中的数据值的 独一无二。基数越低,列中重复的元素越多。因此,具有最低可能基数的列对于每一行具有相同的值。SQL 数据库使用基数来帮助确定给定查询的最佳 查询计划。
它是对索引中唯一值的数目的估计。
对于具有单个主键列的表,基数通常应等于表中的行数。
更多资料 。
Max cardinality: All values are unique
最小基数: 所有值都相同
有些列被称为高基数列,因为它们有适当的约束(比如惟一性) ,禁止在每一行中放置相同的值。
Cardinality is a property which affects the ability to cluster, sort and search data. It is therefore an important measurement for the query planners in DBs, it is a heuristic which they can use to choose the best plans.
It's basically associated with the degree of uniqueness of a column's values as per the Wikipedia article linked to by Kami.
为什么重要的是要考虑它影响索引策略。对只有2个可能值的低基数列进行索引几乎没有意义,因为索引的选择性不足以使用。
简单来说,基数就是表中的行或元组的数量。没有。称为“度”
基数越高,行的差异性越好。差异性有助于导航较少的分支以获得数据。
因此,较高的相关性值意味着:
在数学术语中,基数是一组值中值的计数。一个集合只能包含唯一的值。 一个例子就是集合“ A”。
设集合“ A”为: A = {1,2,3}-该集合的基数为 | 3 | 。
如果集合“ A”包含5个值 A = {10,21,33,42,57} ,则基数为 | 5 | 。
SET VALUES Cardinality A 1,2,3 3 B 10,21,33,42,57 5
在 MySQL 上下文中,这意味着表列的基数是该列的唯一值的计数。如果查看主键列的基数(例如 table.ID) ,那么该列的基数将告诉您该表包含多少行,因为表中的每一行都有一个唯一的 ID。 您不必对该表执行“ COUNT (*)”来查找它有多少行,只需查看基数即可。
来自 手动操作:
红衣主教 索引中唯一值的估计数 通过运行 AnalyzeTABLE 或 myisamchk-a 更新 根据存储为整数的统计信息计数,因此该值不是 即使对于小桌子也必须精确。基数越高, MySQL 在进行连接时使用索引的几率越大。
索引中唯一值的估计数 通过运行 AnalyzeTABLE 或 myisamchk-a 更新 根据存储为整数的统计信息计数,因此该值不是 即使对于小桌子也必须精确。基数越高, MySQL 在进行连接时使用索引的几率越大。
还有 来自 Percona 的分析:
CREATE TABLE `antest` ( `i` int(10) unsigned NOT NULL, `c` char(80) default NULL, KEY `i` (`i`), KEY `c` (`c`,`i`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 mysql> select count(distinct c) from antest; +-------------------+ | count(distinct c) | +-------------------+ | 101 | +-------------------+ 1 row in set (0.36 sec) mysql> select count(distinct i) from antest; +-------------------+ | count(distinct i) | +-------------------+ | 101 | +-------------------+ 1 row in set (0.20 sec) mysql> select count(distinct i,c) from antest; +---------------------+ | count(distinct i,c) | +---------------------+ | 10201 | +---------------------+ 1 row in set (0.43 sec) mysql> show index from antest; +--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | antest | 1 | i | 1 | i | A | NULL | NULL | NULL | | BTREE | | | antest | 1 | c | 1 | c | A | NULL | NULL | NULL | YES | BTREE | | | antest | 1 | c | 2 | i | A | NULL | NULL | NULL | | BTREE | | +--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 3 rows in set (0.00 sec) mysql> analyze table sys_users; +--------------------------------+---------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------------+---------+----------+----------+ | antest | analyze | status | OK | +--------------------------------+---------+----------+----------+ 1 row in set (0.01 sec) mysql> show index from antest; +--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | antest | 1 | i | 1 | i | A | 101 | NULL | NULL | | BTREE | | | antest | 1 | c | 1 | c | A | 101 | NULL | NULL | YES | BTREE | | | antest | 1 | c | 2 | i | A | 10240 | NULL | NULL | | BTREE | | +--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 3 rows in set (0.01 sec)