SexyBeast Asked: 2012-09-19 07:30:38 +0800 CST2012-09-19 07:30:38 +0800 CST 2012-09-19 07:30:38 +0800 CST MySQL如何在查询中使用多个索引? 772 想象一个表,其中列a和b. 查询运行有点像这样: SELECT col1, col2 FROM <table> WHERE a = 'value_1 AND b = 'value_2'; 现在,这个查询是否总是使用两列上的索引?如果有,机制是什么?如果没有,当多个索引可用时,MySQL 是否会检查任何条件来决定使用哪个索引? mysql index 1 个回答 Voted Best Answer RolandoMySQLDBA 2012-09-19T07:54:57+08:002012-09-19T07:54:57+08:00 MySQL 能够执行INDEX MERGE,它允许 MySQL 搜索两个索引并合并结果。当然,MySQL Query Optimizer 是这个过程的仲裁者。 从我的角度来看,只要查看您的查询及其 WHERE 子句,我就会在您的表上创建一个复合索引和一个附加索引。哪个复合索引,(a,b)或(b,a)? 接下来,我将检查每列的基数,如下所示: SELECT COUNT(DISTINCT a) a_count FROM `table`; SELECT COUNT(DISTINCT b) b_count FROM `table`; 基于这些计数 如果 a_count < b_count,那么我将创建复合索引 (a,b) 和 b 上的索引 如果 a_count > b_count,那么我将创建复合索引 (b,a) 和 a 上的索引 如果 a_count = b_count,那么我会创建一对或其他 欲了解更多信息,请阅读以下链接: http://www.mysqlperformanceblog.com/2009/09/19/multi-column-indexes-vs-index-merge/ http://brian.moonspot.net/2008/04/22/playing-with-mysql-index-merge/ http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/index-merge-performance
MySQL 能够执行INDEX MERGE,它允许 MySQL 搜索两个索引并合并结果。当然,MySQL Query Optimizer 是这个过程的仲裁者。
从我的角度来看,只要查看您的查询及其 WHERE 子句,我就会在您的表上创建一个复合索引和一个附加索引。哪个复合索引,
(a,b)
或(b,a)
?接下来,我将检查每列的基数,如下所示:
基于这些计数
欲了解更多信息,请阅读以下链接: