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:复合索引比单独索引有什么好处?的主要内容,如果未能解决你的问题,请参考以下文章