mysql 中的重复索引的基数可以不同吗?
Can cardinality differ for duplicate indexes in mysql?
我有一个 table,它有重复的索引(同一列被索引两次(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 的估计基于 table 使用统计:
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 table 引擎收集的统计信息以及如何配置这些信息:
所有统计数据都存储在 information_schema 内的 STATISTICS table。
这些索引,那些估计的基数更接近于它们的确切基数(字段中不同值的数量)是在更早以前创建的,因此 mysql 为它们收集了更多的统计信息并且它的估计更准确。如果您 运行 analyse table
在这个特定的 table 上,重复索引的基数可能会比现在更接近。
最大的问题是,为什么你有重复的索引?
我有一个 table,它有重复的索引(同一列被索引两次(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 的估计基于 table 使用统计:
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 table 引擎收集的统计信息以及如何配置这些信息:
所有统计数据都存储在 information_schema 内的 STATISTICS table。
这些索引,那些估计的基数更接近于它们的确切基数(字段中不同值的数量)是在更早以前创建的,因此 mysql 为它们收集了更多的统计信息并且它的估计更准确。如果您 运行 analyse table
在这个特定的 table 上,重复索引的基数可能会比现在更接近。
最大的问题是,为什么你有重复的索引?