组合主键VS. MySQL中的二级密钥

时间:2011-11-30 06:09:27

标签: mysql indexing innodb

我有一个包含两个特定列的表,一个是自动递增的数字,另一个是自定义数字。这两列将在where条件中频繁获取。现在我有2个InnoDB引擎选择:

  1. 使用自动递增的数字作为主键,同时在自定义数字列上创建索引。这个选择将很快插入,因为新记录将逐个插入,但它会导致聚集索引上的某些合并或拆分。但是在自定义数字列上构建索引需要额外的时间和空间。

  2. 我可以将自动递增的数字和自定义数字列一起用作主键。在插入时,记录不会一个接一个地放置,因此会导致频繁的B Tree主索引拆分和合并。

  3. 这两个选项将加速使用自动递增数字和自定义数字列作为过滤条件的查询。但是,如果我们考虑插入和空间,哪一个会被优先考虑?

    非常感谢!

1 个答案:

答案 0 :(得分:3)

在这种情况下,复合主键似乎更好,因为密钥成为覆盖索引。为什么你认为它需要拆分?自动增量字段必须是InnoDB中复合主键中的第一个,即所有新行都将附加到末尾。

InnoDB中的自动增量字段在表中是唯一的,即使在复合主键中也是如此,而MyIsam中的字段在主键的每个新休息部分重新启动时都是如此。