复合键是否比常规ID更好地作为几列上的键和唯一索引?

时间:2014-08-27 17:38:38

标签: mysql

使用复合键有效提升吗? 在很多情况下,在我看来,不需要常规id列,因为SQL中的每一行都由多个列唯一标识。 在这些列上应用唯一索引。 所以我的问题是将使用该唯一索引作为主键和drop id。

1 个答案:

答案 0 :(得分:2)

一个好处是InnoDB *表使用主键作为聚簇索引,也就是说,它以聚簇索引顺序存储表,这使得主键查找比辅助查找更有效键查找(即使在二级索引是唯一键的情况下)。如果您始终按次要唯一列而不是id伪列查找行,那么将这些列用作主键是有利的。

另一方面,使用庞大的列集作为主键会增加其他二级索引的大小,因为在InnoDB中,每个二级索引叶都包含发生该值的主键值。如果您的主键是三个整数,一个日期和一个varchar(32),那么这会为二级索引增加更多的批量。多少取决于您的数据类型以及您拥有的二级索引数。

当您同时拥有自动增量主键和辅助唯一键时,也会出现一些不可避免的死锁情况。

还有一个关于唯一键的突出错误,允许他们to get duplicate values in a rare race condition

*我假设你正在使用InnoDB because no one should use MyISAM