12 当为两个或更多列创建复合主键时,例如PRIMARY KEY(col1, col2, col3);系统会分别对INDEX每一列进行吗? 我问这个问题的原因是,当我们使用时UNIQUE INDEX (col1, col2, col3),它仅充当INDEX第一列,而我们需要INDEX为其他列创建其他。我想知道复合主键是否也是如此。 mysql index primary-key — Googlebot source
16 复合主索引将始终确保col1,col2,col3值的组合是唯一的。如果索引的目的是确保值唯一,那么您将实现 复合索引还为列col1,col2和col3的任何组合提供索引匹配 如果您使用任何列而不是其他列进行联接或过滤,则将在col2和col3上分别创建索引。 我总是喜欢使用数字主键(没有业务关联),并且在必要时会首选复合主键的唯一索引。 — 斯蒂芬·森科马戈·穆索克 source 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