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

Goo*_*bot 16 mysql index primary-key

为两列或更多列创建复合主键时,例如PRIMARY KEY(col1, col2, col3);系统将INDEX每列单独?

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

Ste*_*oke 20

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

  2. 复合索引还提供对列 col1、col2 和 col3 的任意组合的索引匹配

  3. 如果您使用任何列连接或过滤而不使用其他列,您将在 col2 和 col3 上创建单独的索引。

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

  • 在 col1、col2 和 col3 上有索引意味着 SELECT * FROM col1 = 10 将是有效的,因为 col1 是索引中的第一列,所以 #3 允许您对 col2 和 col3 执行相同的操作,因此如果您在没有 col1 的情况下单独按那些列过滤然后这些列也被索引 (3认同)
  • @Andy #3 是对 col1、col2 和 col3 的复合索引的补充,因此将使用复合索引。但是,如果您对 col2 和 col3 进行过滤而没有 col1,那么您需要单独为它们中的每一个单独的索引 (2认同)
  • @PaulWasilewski 是的,确实存在复合主键有意义的特殊情况,但这些只是特殊情况。 (2认同)