我有一个包含 16 列的表。它将是 Web 应用程序中最常用的表,它将包含大约数百行。数据库是在sql server 2008上创建的。
我的问题是主键的选择。什么更快?我可以使用带有两个 bigint-s 的复杂主键,或者可以使用一个 varchar 值,但之后需要将其连接起来?
最佳答案
您必须考虑更多因素:
- 数据访问流行模式,您将如何访问表?
- 有多少个非聚集索引?
- 更新频率
- 更新模式(顺序插入、随机)
- 删除模式
所有这些因素,特别是前两个因素,应该决定您对聚集键的选择。请注意,主键和聚集键是不同的概念,经常混淆。阅读我对 Should I design a table with a primary key of varchar or int? 的回答有关驱动集群键选择的标准的更详细讨论。
没有任何关于您的访问模式的信息,我可以非常简短和简洁地回答,并且实际上是正确的:较窄的 key 总是更快(出于 IO 的原因)。然而,这种回应完全没有任何值(value)。唯一能让您的应用程序更快的方法是选择查询执行计划将使用的键。
关于SQL 主键 - 复杂主键还是带有串联的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583728/