SQL 主键 - 复杂主键还是带有串联的字符串?

标签 sql sql-server sql-server-2008 optimization web-applications

我有一个包含 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/

相关文章:

c# - 删除所有一对多关联项 - Telerik OpenAccess ORM

sql-server - TADOStoredProc 和 SQL Server 存储过程,参数作为默认值

sql - 如何使 CREATE OR REPLACE VIEW 在 SQL Server 中工作?

mysql ->、<、<>、= 内部连接条件的运算符

php - Doctrine query builder,选择外键

java - 在表中添加带有链接的新条目

php - 使用循环插入多行时获得成功确认

SQL 从一列到另一列搜索字符串

sql - 在 sql 中插入查询或更新哪个更快?

sql-server - 如何选择 X 随机行,同时保证 Y 某些特定行出现在结果中?