复合索引是否也适用于第二个字段的查询?
Is a composite index also good for queries on the second field?
我们使用 db 作为 mysql 并且有一个 table 有 6 个字段,其中我们在两个字段上创建了复合索引,比方说 (A,B)。有时当只有字段 B 有查询时,查询就会进入慢查询雷达。是否只有字段 B 的查询被复合索引完全优化?
或者我们需要在字段B上创建一个单独的索引,以便更好地优化。
您可以使用 EXPLAIN 查看查询优化器正在做什么。
回答您的问题 - 如果您的索引在 (A, B) 上,并且您的查询在 where 子句中不包含 A,则不会使用该索引。
要理解其中的原因,假设您正在构建电影的纸质目录 collection。每部电影都放在一张索引卡上,您按年份组织目录,然后按电影名称组织目录。这使得查找 2019 年上映的所有电影变得非常容易,但要查找名为 "Joker" 的电影将需要您依次浏览所有索引卡。
我们使用 db 作为 mysql 并且有一个 table 有 6 个字段,其中我们在两个字段上创建了复合索引,比方说 (A,B)。有时当只有字段 B 有查询时,查询就会进入慢查询雷达。是否只有字段 B 的查询被复合索引完全优化?
或者我们需要在字段B上创建一个单独的索引,以便更好地优化。
您可以使用 EXPLAIN 查看查询优化器正在做什么。
回答您的问题 - 如果您的索引在 (A, B) 上,并且您的查询在 where 子句中不包含 A,则不会使用该索引。
要理解其中的原因,假设您正在构建电影的纸质目录 collection。每部电影都放在一张索引卡上,您按年份组织目录,然后按电影名称组织目录。这使得查找 2019 年上映的所有电影变得非常容易,但要查找名为 "Joker" 的电影将需要您依次浏览所有索引卡。