如何在mysql中的复合主键上进行INDEX?


12

当为两个或更多列创建复合主键时,例如PRIMARY KEY(col1, col2, col3);系统会分别对INDEX每一列进行吗?

我问这个问题的原因是,当我们使用时UNIQUE INDEX (col1, col2, col3),它仅充当INDEX第一列,而我们需要INDEX为其他列创建其他。我想知道复合主键是否也是如此。

Answers:


16
  1. 复合主索引将始终确保col1,col2,col3值的组合是唯一的。如果索引的目的是确保值唯一,那么您将实现

  2. 复合索引还为列col1,col2和col3的任何组合提供索引匹配

  3. 如果您使用任何列而不是其他列进行联接或过滤,则将在col2和col3上分别创建索引。

  4. 我总是喜欢使用数字主键(没有业务关联),并且在必要时会首选复合主键的唯一索引。


1
好点!那么,复合主键类似于UNIQUE INDEX,并且我们没有第二,第三,...列的索引来快速获取行?
Googlebot 2012年

1
@ssmusoke我可以从第col13点的遗漏中假设a SELECT * WHERE col1 = 10是有效的吗?
安迪

2
@Andy#3是col1,col2和col3的复合索引的补充,因此将使用复合索引。但是,如果对col2和不带col1的col3进行过滤,则您需要为每个索引单独设置索引
Stephen Senkomago Musoke 2012年

3
在col1,col2和col3上具有索引意味着SELECT * FROM col1 = 10将很有效,因为col1是索引中的第一列,因此#3允许您对col2和col3进行相同操作,因此如果过滤器仅通过那些列,而不COL1则列也索引
斯蒂芬Senkomago穆索凯

2
@PaulWasilewski是的,确实确实存在一些特殊情况,其中复合主键很有意义,但这些只是特殊情况。
Stephen Senkomago Musoke
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.