1

我有一个包含字段的覆盖索引,a b并且c按该顺序。

ALTER TABLE table ADD INDEX covering(a, b, c)

以下查询使用覆盖索引,更具体地说,只是覆盖索引中的第一个字段。

SELECT * FROM table
GROUP BY a

如果我创建另一个专门包含的索引,我会观察到性能提升a吗?

ALTER TABLE table ADD INDEX a(a)

SELECT还是上述索引的工作方式与语句中的覆盖索引完全相同?

如果我的查询是GROUP在一个不是覆盖索引中第一个序列的字段上执行的呢?

SELECT * FROM table
GROUP BY b

我的索引是

ALTER TABLE table ADD INDEX b(b)
4

1 回答 1

1

如果您有复合索引(a, b, c)并使用ORDER BY a,那么它将工作并使用该索引。在 just 上添加索引(a)将使查询计划器更可取,但这将是浪费的,因为您必须在索引中保留更多数据,并且在表更新时更新两个索引。使用较窄的指数会有少量收益,但可能难以量化这种优势。

至于使用 查询ORDER BY b,它不能使用上面的任何索引,您必须创建索引(b)或复合索引(b, ...)才能获得合理的性能。

于 2012-12-03T05:14:35.197 回答