想象一个表,其中的列a
和b
.
查询运行有点像这样:
SELECT col1, col2 FROM <table> WHERE a = 'value_1 AND b = 'value_2';
Run Code Online (Sandbox Code Playgroud)
现在,这个查询是否总是使用两列上的索引?如果是,机制是什么?如果没有,当有多个索引可用时,MySQL 是否会检查以决定使用哪个索引?
Rol*_*DBA 14
MySQL 能够执行INDEX MERGE,它允许 MySQL 搜索两个索引并合并结果。当然,MySQL 查询优化器是这个过程的仲裁者。
从我的角度来看,只要查看您的查询及其 WHERE 子句,我就会在您的表上创建一个复合索引和一个附加索引。哪个复合索引,(a,b)
或(b,a)
?
接下来我将检查每列的基数,如下所示:
SELECT COUNT(DISTINCT a) a_count FROM `table`;
SELECT COUNT(DISTINCT b) b_count FROM `table`;
Run Code Online (Sandbox Code Playgroud)
根据这些计数
欲了解更多信息,请阅读以下链接: