【问题标题】:Can we delete a UNIQUE and KEY index on id if we have a PRIMARY KEY?如果我们有 PRIMARY KEY,我们可以删除 id 上的 UNIQUE 和 KEY 索引吗?
【发布时间】:2015-01-22 11:33:21
【问题描述】:
我们正在优化我们公司的 MySQL 数据库。在很多表中我们发现有:
- id 上的主键
- id 上的唯一键
- id 上的“key”
由于 PRIMARY 键已经是唯一的,我知道 UNIQUE 键是多余的,不需要。我也明白,从这个意义上说,KEY 只不过是“索引”,所以它也是多余的。
是不是真的可以删除取UNIQUE和KEY,并且和主键索引提供的速度一样?
这三个索引是否会导致 SELECT 查询变慢?
【问题讨论】:
标签:
mysql
indexing
primary-key
【解决方案1】:
是的,您可以删除唯一索引和键声明。 AFAIK,每个 SQL dbms 使用唯一索引实现主键约束。您可以通过运行 explain 来验证,删除这两个,然后再次运行 explain。
冗余索引可能会稍微影响 SELECT 性能,因为冗余索引为查询规划器提供了更多可供考虑的选择。但我希望冗余索引对 INSERT 和 DELETE 语句有更大的影响,因为这些索引必须与表一起更新。 (仅当更新的列恰好被索引时,SQL UPDATE 语句才需要更改索引。)