Aji*_*mar 2 mysql database indexing cardinality
我有一个具有重复索引的表(同一列被索引两次(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', '', ''
Run Code Online (Sandbox Code Playgroud)
mysql 中的基数是一个估计,并且 mysql 根据表使用统计信息进行估计:
基数
索引中唯一值数量的估计。这是通过运行 ANALYZE TABLE 或 myisamchk -a 来更新的。基数是根据存储为整数的统计信息来计算的,因此即使对于小表,该值也不一定准确。基数越高,MySQL 在进行连接时使用索引的机会就越大。
您可以在 mysql 和 innodb 的文档中阅读更多关于为 myisam 和 innodb 表引擎收集的统计信息以及如何配置这些信息:
所有统计信息都存储在information_schema 内的STATISTICS 表中。
索引,那些估计的基数更接近它们的确切基数(字段内不同值的数量)是在更早之前创建的,因此mysql为它们收集了更多的统计信息,并且它的估计更准确。如果您analyse table在这个特定的表上运行,重复索引的基数可能会比现在更接近。
最大的问题是,为什么会有重复的索引?
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |