MySQL InnoDB中的群集主键

时间:2018-03-29 20:48:59

标签: mysql primary-key clustered-index

我们有一个带有InnoDB表的MySQL数据库,其中包含两个整数字段,例如AB。 现在假设我们使用索引A和B创建聚簇主键。 每次配对A,B时,我们的DB都会有不同的索引,所以

  • A = 123且B = 456将产生唯一索引
  • A = 123且B = 457将产生另一个唯一索引
  • A = 124而B = 456会产生另一个指数,依此类推......

我想知道情况A=123, B=456是否会与A=456, B=123生成相同的索引(碰撞时)。如果答案是否定(我猜),MySQL如何组合这些字段以获得唯一索引?为了生成唯一索引,总和A+B因上述原因而不好,产品A*B会在变量中浪费大量空间,而当A或B为零时会失败,那么&# 39;是MySQL(或任何其他数据库)使用的算法,以实现这一结果?

1 个答案:

答案 0 :(得分:1)

MySQL索引保留列顺序,并分别存储每列的值。

您可以将其视为电话簿。电话簿就像是两列的索引:姓氏,然后是名字。

在电话簿中,他们不会将名称添加到一起。它们存储两者,用逗号分隔。因此,“Thomas Jay”与“Jay Thomas”不同。很明显,它们是独立的领域。

多列索引中的情况相同。列的位置很重要。它们不会加在一起或相乘或其他任何东西。

P.S。:使用“clustered”有点令人困惑,因为聚簇索引在数据库中已经有了不同的含义。这意味着表以索引顺序存储。我建议使用“复合索引”,即表示具有多个列的索引。