我有以下查询:
SELECT count(*) from main where platform_id='ACME' AND master_id IS NOT NULL;
查看我的数据库,我在 platform_id
和 master_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/