답변:
최대 카디널리티 : 모든 값이 고유합니다.
최소 카디널리티 : 모든 값이 동일합니다.
일부 열은 모든 행에 동일한 값을 넣는 것을 금지하는 제약 조건 (예 : 고유)이 있기 때문에 높은 카디널리티 열이라고합니다.
카디널리티는 데이터를 클러스터링, 정렬 및 검색하는 기능에 영향을주는 속성입니다. 따라서 DB의 쿼리 플래너에게 중요한 측정이며 최상의 계획을 선택하는 데 사용할 수있는 휴리스틱입니다.
수학적 용어에서 카디널리티는 값 집합에있는 값의 개수입니다. 집합에는 고유 한 값만 포함될 수 있습니다. 예를 들어 "A"세트가 있습니다.
집합 "A"를 A = {1,2,3}로 설정합니다. 해당 집합의 카디널리티는 | 3 |입니다.
집합 "A"에 5 개의 값 A = {10,21,33,42,57}이 포함 된 경우 카디널리티는 | 5 |입니다.
이것이 mysql의 맥락에서 의미하는 바는 테이블 열의 카디널리티가 해당 열의 고유 값 수라는 것입니다. 기본 키 열 (예 : table.id)의 카디널리티를보고있는 경우 해당 열의 카디널리티는 테이블의 각 행에 대해 하나의 고유 ID가 있으므로 해당 테이블에 포함 된 행 수를 알려줍니다. 테이블에있는 행 수를 확인하기 위해 해당 테이블에서 "COUNT (*)"를 수행 할 필요가 없습니다. 단순히 카디널리티 만 확인하면됩니다.
로부터 수동 :
카디널리티
인덱스의 고유 값 수에 대한 추정치입니다. ANALYZE TABLE 또는 myisamchk -a를 실행하여 업데이트됩니다. 카디널리티는 정수로 저장된 통계를 기반으로 계산되므로 작은 테이블에서도 값이 반드시 정확하지는 않습니다. 카디널리티가 높을수록 MySQL이 조인을 수행 할 때 인덱스를 사용할 가능성이 높아집니다.
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)