我有一个具有重复索引的表(同一列被索引两次(BTREE)),但令人惊讶的是基数不同。为什么会发生这种情况。
'ACCENTURE_PASSIVE_CANDIDATES', '1', 'LD_INDEX', '1', 'LOCATION_DISTANCE', 'A', '37876', NULL, NULL, 'YES', 'BTREE', '', ''
'ACCENTURE_PASSIVE_CANDIDATES', '1', 'RS_INDEX', '1', 'RELEVANCY_SCORE', 'A', '21996', NULL, NULL, 'YES', 'BTREE', '', ''
'ACCENTURE_PASSIVE_CANDIDATES', '1', 'score_index', '1', 'RELEVANCY_SCORE', 'A', '146566', NULL, NULL, 'YES', 'BTREE', '', ''
'ACCENTURE_PASSIVE_CANDIDATES', '1', 'location_index', '1', 'LOCATION_DISTANCE', 'A', '172873', NULL, NULL, 'YES', 'BTREE', '', ''
最佳答案
mysql 中的基数是 estimate ,并且 mysql 根据表使用统计数据进行估计:
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 joins.
您可以在 mysql 和 innodb 的文档中阅读有关为 myisam 和 innodb 表引擎收集的统计信息以及如何配置这些统计信息的更多信息:
所有统计数据都存储在 STATISTICS table 中在 information_schema 内。
索引,那些估计的基数更接近它们的精确基数(字段内不同值的数量)是在更早之前创建的,因此mysql为它们收集了更多的统计信息,并且它的估计更准确。如果您在此特定表上运行analysis table
,重复索引的基数可能会比现在更加接近。
最大的问题是,为什么会有重复的索引?
关于mysql - mysql 中重复索引的基数可以不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851674/