【发布时间】:2010-12-04 07:31:05
【问题描述】:
一直在研究使用多列主键,因为性能对于流量和数据库的大小非常重要,我需要知道在我开始在我的许多表上丢弃唯一 ID 方法之前是否有什么需要考虑的开始使用多列主键。
那么,使用多列主键与基本的单列 auto-inc 主键相比,在性能/优化方面的优缺点是什么?
【问题讨论】:
一直在研究使用多列主键,因为性能对于流量和数据库的大小非常重要,我需要知道在我开始在我的许多表上丢弃唯一 ID 方法之前是否有什么需要考虑的开始使用多列主键。
那么,使用多列主键与基本的单列 auto-inc 主键相比,在性能/优化方面的优缺点是什么?
【问题讨论】:
您是否有特殊原因需要/想要使用多列键而不是(我假设)已经创建的单列键?
Natural Keys 的一个问题是处理跨所有外键对键值的级联更新。诸如自动增量列之类的代理键可以避免这种情况。
在性能方面,根据行数、列的数据类型、存储引擎以及专用于 MySQL 的 RAM 量,多列键会影响性能,因为索引。
根据我的经验,在开发和维护方面,使用代理键作为 PK 然后创建涵盖自然键查询的索引几乎总是更容易。但是,确定对应用程序的真正性能影响的唯一方法是使用真实的负载和数据集对其进行基准测试。
HTH-
克里斯
【讨论】:
我认为多个主键不会有任何性能问题。它或多或少相当于拥有多个索引(在进行插入时,您将花费更多时间计算索引值)。
有时数据模型使用多个键更有意义。我首先会担心是否直截了当,然后会担心性能。您始终可以添加更多索引、改进查询或调整服务器设置。
我认为我遇到的最多的是 4 列主键。让我有点畏缩,但它奏效了¹。
[1]“工作”被定义为“按照规范执行的应用程序”,并不意味着使用所述应用程序完成了实际任务。 :)
【讨论】: