MYSQL:复合索引比单独索引有什么好处?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL:复合索引比单独索引有什么好处?相关的知识,希望对你有一定的参考价值。

我一直在尝试对具有大约一百万条记录的表执行SELECT查询,这些记录由这些列(以及其他列组成。:

id, lastName, firstName,

我们执行此查询:

SELECT * 
FROM `user` 
WHERE lastName = 'someLastName' 
AND firstName = 'someFirstName'

无论我在这些字段上具有两个单独的索引,还是复合索引(lastName,firstName),我都能获得几乎相同的性能(以毫秒为单位)。

我遇到了这个线程:difference between creating index with two columns and creating separate index on two columns

[这个人解释了复合索引可能不足的情况,但他没有提供任何示例来说明它比建立单独的索引实际上更有益。

有人可以提供一个示例/简单的解释来说明复合索引是一个不错的选择的情况吗?

答案

[如果您知道经常查询字段组合,则组合索引表示“您只需要搜索一棵B树”。否则,服务器将必须搜索n单个B树,然后合并结果。

(N.B.:“B树”是数据库服务器通常用于创建索引的数据结构...)

((您可以使用EXPLAIN命令来快速查看服务器计划如何执行此操作……并确定它does必须执行此操作。)] >>

另一答案

我认为mysql具有如何使用复合索引的良好explanation

另一答案

这里的最终答案可能取决于EXPLAIN告诉您此查询的两种索引策略(分离还是复合)。通常,如果仅在WHERE子句中的名称字段之一上具有索引,则MySQL将不会使用任何一个索引。它可能同时使用两个索引,但这不太可能。另一方面,(lastName, firstName)上的索引至少确实覆盖了WHERE子句(尽管没有覆盖SELECT子句),因此应该成为MySQL使用的候选对象。如果MySQL确实没有使用复合索引,则应检查EXPLAIN以找出原因。

另一答案

简单的答案也许是电话簿的类比(还记得吗?)。>

通常,城市的电话簿会根据姓氏,名字进行索引。想象一下一百万人口城市的电话簿。

以上是关于MYSQL:复合索引比单独索引有什么好处?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:制作 3 个字段的复合索引,还是制作 3 个单独的索引?

关于MySQL复合索引的使用方法有哪些?

数据库 | SQL语法优化方法及实例详解

MySQL联合索引生效的条件、索引失效的条件

mysql 复合 唯一 索引

如果我正在访问的字段是复合索引的一部分,我是不是仍然可以通过引用其中一个字段来获得该索引的好处?