是否不需要创建额外的索引?

Is it unnecessary to create additional indexes?

如果我在一个列上有一个唯一键,是否不需要在同一列上有一个额外的索引?

如果是多列唯一键怎么办?这是否不需要在唯一索引列列表中的第一个列上有一个额外的索引?

SO 上也有类似的问题,但我想在这个较窄的上下文中得到明确的答案。

would that make it unnecessary to have an additional index on the same column?

是的。

What if it is a multi-column unique key?

是的,多一些索引和唯一索引就可以了。


==详细解释==

您应该记住,每次在 table 上执行 DML 时。它必须重组您的索引。因此,这完全取决于您要取得的成就以及您准备妥协的内容。

假设您正在使用某个数据库,其查询性能 (SELECT) 很慢。现在,您想到了创建索引,这最终提高了一些性能。所以,你想,有这个索引是很有必要的。

后来,过了几天,您开始观察到在同一 table 上执行任何 DML 操作时速度变慢。现在,取决于您准备包含什么。这可以定义为您(不需要)。

8.3 Optimization and Indexes

Although it can be tempting to create an indexes for every possible column used in a query, unnecessary indexes waste space and waste time for MySQL to determine which indexes to use. Indexes also add to the cost of inserts, updates, and deletes because each index must be updated. You must find the right balance to achieve fast queries using the optimal set of indexes.

If I have a unique key on a column, would that make it unnecessary to have an additional index on the same column?

是的。 UNIQUE KEY 隐式创建索引。

What if it is a multi-column unique key? Would that make it unnecessary to have an additional index on the FIRST column in the unique index column list?

是的。任何需要搜索第一列的查询都可以使用多列索引。

打个比方,如果我让你在电话簿中搜索名为 "Smith, Sarah" 的人,这就像你搜索一个包含两列的复合索引。如果我要求您使用同一电话簿搜索姓氏 "Smith" 的人,第一列的排序顺序仍然有帮助,即使您不需要搜索第二列。