SQL Server - 在这里使用复合主键有什么好处?

标签 sql sql-server database

下面是我的表格

费率表:

rate_id   start_date   end_date     rate1   rate2  rate3
---------------------------------------------------------
  1       2014-08-24   2014-08-28     50     40      30
  4       2014-08-28   2014-08-23     45     36      46
  1       2014-08-29   2014-08-31     60     45      66

rate_id 是一个外键。

我在这张表上的大部分搜索查询如下所示

select * 
from Rate 
where rate_id = 1 
  and start_date between 'xxx' and 'yyy'

rate_idstart_date 的组合是唯一的。

  1. 我可以在 (rate_id, start_date) 上创建复合主键吗?它有用吗?
  2. 或者我是否需要在 3 列上创建非聚集索引?

最佳答案

是的,按该顺序在这两列上的复合聚簇主键对于该查询非常有用。

它将允许在覆盖索引上使用简单的范围搜索。要声明为主键,列必须不能为空,并且组合必须是唯一的,但我认为是这种情况。

虽然 rate1、rate2、rate3 看起来很可疑,可能表明您的表不是第一范式。

关于SQL Server - 在这里使用复合主键有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25821676/

相关文章:

mysql - 如果 id 相同,则多个 SQL 行合并为单行

java - SQLite 分组并按工作类次排序

sql - SQL CE select语句中的反向 bool 值(位)

SQL Server : pivot functionality,需要透视表

sql - 关键字 'TOP' 附近的语法不正确。数据库服务器

ruby-on-rails - 我应该如何将 Facebook 调用数据缓存到我的数据库中,以便 Rails 可以在本地使用它?

sql - Django 仅选择具有重复字段值的行

sql-server - 如何在 SQL Server 2008 R2 的 T-SQL 中格式化数字?

java - 如何让DB为后续事务返回不同的行?

c# - gridview 中的日期格式仅包含日期