mysql - 综合指数与个人指数

标签 mysql indexing

我有以下查询:

SELECT count(*) from main where platform_id='ACME' AND master_id IS NOT NULL;

查看我的数据库,我在 platform_idmaster_id 上都有索引。运行此查询需要 8.1 秒。

然后我添加了一个复合索引:

ALTER TABLE main ADD INDEX (platform_id, master_id);

当我再次运行查询时,只用了 61.6 毫秒,快了 100 多倍!我的问题是为什么将两个列一起索引而不是在上述查询中使用两个单独的索引会产生如此大的差异?

最佳答案

在这种情况下,MySQL 只能使用一个索引。它将选择 platform_id 索引或 master_id 索引,具体取决于哪个具有最高基数(索引中不同值的数量)。您可以使用 SHOW INDEXES 查看每个索引的基数。 MySQL 为基数存储的值可能不正确,在这种情况下,您可以强制它使用 ANALYZE TABLE main 重新计算它们,但您看到的结果可能只是因为这两个索引中唯一值的分布使得它没有选择最有效的一个。像您在此处所做的那样使用复合索引可能是最好的策略。

关于mysql - 综合指数与个人指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28709047/

相关文章:

mysql - 恢复索引主键

mysql - WordPress 查询时间慢

mysql - 使用 SQL 从日期类型的生日字段中获取年龄

php - 使用 php 和 SQL 获取总和是日期相同

mysql - Rails - mysql2安装错误

indexing - 如何生成(书籍)索引?

javascript - 我的喜欢/不喜欢系统没有按预期工作 php

python - 在 Python 中, Pandas 。如何通过 WOM - 'Week of the Month' 对数据框进行子集化?

java - 外部实体更改后索引不更新

Mysql 8列索引