【问题标题】:Can cardinality differ for duplicate indexes in mysql?mysql中重复索引的基数可以不同吗?
【发布时间】:2016-01-18 09:50:17
【问题描述】:

我有一个具有重复索引的表(同一列被索引两次(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 database indexing cardinality


【解决方案1】:

mysql 中的基数是estimate,mysql 的估计基于表使用统计:

基数

对索引中唯一值数量的估计。这是 通过运行 ANALYZE TABLE 或 myisamchk -a 更新。基数是 根据存储为整数的统计信息进行计数,因此该值不是 即使对于小桌子也必须准确。基数越高, MySQL 在进行连接时使用索引的机会越大。

您可以在 mysql 和 innodb 的文档中阅读更多关于为 myisam 和 innodb 表引擎收集的统计信息以及如何配置这些信息:

所有统计信息都存储在 information_schema 内的 STATISTICS table 中。

索引,那些估计的基数更接近它们的确切基数(字段内不同值的数量)是在更长时间之前创建的,因此 mysql 为它们收集了更多的统计信息,并且它的估计更准确。如果你在这个特定的表上运行analyse table,可能重复索引的基数会比现在更接近。

最大的问题是,为什么会有重复的索引?

【讨论】:

  • “mysql 根据表使用统计信息进行估计”是什么意思?我的意思是基数如何与表使用相关联??
  • 我和 Ajit 在一起,我认为“使用”没有任何影响。
猜你喜欢
  • 1970-01-01
  • 2012-05-22
  • 2011-05-23
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
相关资源
最近更新 更多