2016-02-12 57 views
0

我可以在互联网上找到的所有东西都解释了这两种索引之间的差异,这不是我的问题。MySql`id`列有'PRIMARY'和'UNIQUE'索引,这是理想吗?

当我在数据库中创建一个新表时,我总是创建一个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列上创建这两个索引是否正常/理想?

+0

唯一的密钥是多余的。 – symcbean

回答

0

PRIMARY KEY(x), UNIQUE(x) - 由于PRIMARY KEY通过定义(在MySQL)UNIQUE,后来的索引是多余的,应当被丢弃。

另外,在UNIQUE(x), INDEX(x)中,INDEX(x)是多余的。

冗余索引占用额外的空间。 (在将来的版本中,他们甚至可能被禁止 - 这是多么无用)。

每张表应该(或甚至“必须”)有一个PRIMARY KEY。它可以是AUTO_INCREMENT,也可以是一些“自然”键。 “自然”在某种意义上说是UNIQUE,从不是NULL。在一个简短的调查中,我发现只有25%的表格有AUTO_INCREMENT列。

More on indexing

不要忘记考虑“复合”索引,如INDEX(a,b)