【发布时间】:2012-12-29 13:50:50
【问题描述】:
我正在创建一个包含四列的 Innodb 表。
表格
column_a (tiny_int)
column_b (medium_int)
column_c (timestamp)
column_d (medium_int)
Primary Key -> column_a, column_b, column_c
从逻辑的角度来看,A、B、C 列必须一起组成一个 PK。但是,为了提高性能并能够直接从索引中读取(使用索引),我正在考虑一个包含所有 4 个的 PK列(A、B、C、D)。
问题
在 Innodb 表的主键上附加一个额外的列会有什么表现?
注意事项
- 代理主键绝对不可能
- 此表上不存在其他索引
- 表是读/写密集型(两者差不多)
谢谢!
【问题讨论】:
-
将
column_d添加到您的PK 将意味着只要column_d不同,就可以在(column_a, column_b, column_c)中得到多个具有相同值的记录。另外,为什么要拒绝向表中添加其他索引:如果您想要一个覆盖索引,为什么不添加一个除了 PK?请记住,过早的优化是万恶之源 - 您是否真的面临着要解决的性能问题?如果有,是什么? -
column_d的观点非常好,我想知道是否有经验法则或一些指导原则。有相当多的桌子有很大的 PK,我希望得到指导。谢谢
标签: mysql primary-key innodb composite-index