SQL主键 - 具有串联的复杂主键或字符串?

Sib*_*lja 2 sql sql-server optimization web-applications sql-server-2008

我有一个16列的表.它将是Web应用程序中最常用的表,它将包含大约几十万行.数据库是在sql server 2008上创建的.

我的问题是主键的选择.什么更快?我可以使用复杂的主键与两个bigint-s或我可以使用一个varchar值但我需要连接后?

Rem*_*anu 5

您还必须考虑更多因素:

  • 数据访问流行模式,您打算如何访问该表?
  • 有多少非聚集索引?
  • 更新频率
  • 更新模式(顺序插入,随机)
  • 删除模式

所有这些因素,特别是前两个因素,都应该推动您选择群集密钥.请注意,主键和聚簇键是不同的概念,经常混淆.阅读我的答案我应该设计一个主键为varchar或int的表吗?有关驱动群集键选择的标准的更长时间的讨论.

如果没有关于访问模式的任何信息,我可以非常简短地回答,并且实际上是正确的:较窄的密钥总是更快(出于IO的原因).但是,这种反应绝对没有价值.使您的应用程序更快的唯一方法是选择将由查询执行计划使用的密钥.