mysql - mysql 中重复索引的基数可以不同吗?

标签 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', '', ''

最佳答案

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/

相关文章:

php - 如何在 PHP 中的其他 while 循环中运行 while 循环?

database - Rails 测试数据库中的持久表

mysql - 多表连接和限制的最佳索引

php - 我们可以将多个参数传递给 Controller ​​中的函数吗?

mysql - 访问网站的平均日期

java - JDBC : Unable to connect second time

php - MySQL:将未加密的密码列转换为 MD5 哈希

mysql - 尝试导入大型 sql 数据库文件时在 DBeaver mysql 中出现错误

r - 在数据框中选择非 NA 数据范围的简单有效方法

postgresql - PSQL 不区分大小写的 INDEX lower() 不起作用