我在 Internet 上可以找到的所有内容都解释了这些类型的索引之间的区别,这不是我的问题。
当我在数据库中创建一个新表时,我总是创建一个 id 主键,我相信大多数人都会这样做。我总是让它成为 PRIMARY KEY, NOT NULL, UNIQUE, AUTO_INCREMENT
。
我最近开始大量添加自定义索引,我注意到我的 id 字段有这两个索引(自动创建,原因很明显):
There is a PRIMARY index
There is also a UNIQUE index
我的假设是由于 PK 标志(主键)自动生成了“PRIMARY”索引,并且由于 UNIQUE
标志,创建了“UNIQUE”索引。
我假设在同一列上有两个索引会增加不必要的开销。我的问题是,这是真的吗?我应该删除其中一个索引吗?或者在我的 id 列上创建这两个索引是否正常/理想?
最佳答案
PRIMARY KEY(x), UNIQUE(x)
-- 因为 PRIMARY KEY
是定义(在 MySQL 中) UNIQUE
,后面的索引是多余的,应该去掉。
此外,在 UNIQUE(x), INDEX(x)
中,INDEX(x)
是多余的。
冗余索引占用额外空间。 (在未来的版本中,它们甚至可能会被禁止——这就是它们的无用之处。)
每个表都应该(甚至“必须”)有一个PRIMARY KEY
。它可以是 AUTO_INCREMENT
,也可以是一些“自然”键。 “自然”的意思是它是 UNIQUE
而不是 NULL
。在一个简短的调查中,我发现只有 25% 的表有 AUTO_INCREMENT
列。
不要忘记考虑“复合”索引,例如 INDEX(a,b)
。
关于MySql `id` 列有一个 'PRIMARY' 和一个 'UNIQUE' 索引,这是理想的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35372950/