我们有一个带有InnoDB表的MySQL数据库,其中包含两个整数字段,例如A
和B
。
现在假设我们使用索引A和B创建聚簇主键。
每次配对A,B时,我们的DB都会有不同的索引,所以
我想知道情况A=123, B=456
是否会与A=456, B=123
生成相同的索引(碰撞时)。如果答案是否定(我猜),MySQL如何组合这些字段以获得唯一索引?为了生成唯一索引,总和A+B
因上述原因而不好,产品A*B
会在变量中浪费大量空间,而当A或B为零时会失败,那么&# 39;是MySQL(或任何其他数据库)使用的算法,以实现这一结果?
答案 0 :(得分:1)
MySQL索引保留列顺序,并分别存储每列的值。
您可以将其视为电话簿。电话簿就像是两列的索引:姓氏,然后是名字。
在电话簿中,他们不会将名称添加到一起。它们存储两者,用逗号分隔。因此,“Thomas Jay”与“Jay Thomas”不同。很明显,它们是独立的领域。
多列索引中的情况相同。列的位置很重要。它们不会加在一起或相乘或其他任何东西。
P.S。:使用“clustered”有点令人困惑,因为聚簇索引在数据库中已经有了不同的含义。这意味着表以索引顺序存储。我建议使用“复合索引”,即表示具有多个列的索引。