以下是我的表
Rate
表:
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_id
和start_date
的组合是唯一的。
rate_id, start_date
)上创建复合主键吗?它有用吗?答案 0 :(得分:2)
是的,按顺序在这两列上的复合聚簇主键对于该查询非常有用。
它允许在覆盖索引上使用简单范围搜索。要声明为主键,列必须都不可为空,组合必须是唯一的,但我认为是这种情况。
rate1,rate2,rate3虽然看起来很可疑,但可能表示你的表格不是第一种正常形式。
答案 1 :(得分:1)
主键的选择不应取决于您的工作负载。主键是一个元组,它在行集中使行唯一。
就性能优化而言,它取决于您的查询工作量.IF您使用的是rate_id&在大多数查询中都是start_date。然后在索引中使用这两列是有意义的。否则你应该只有rate_id。
在您的情况下,您的过滤谓词同时使用rate_id和amp;在大多数查询中都是start_date,因此你应该将rate_id + start_date作为复合主键。它将为你保存索引存储空间并且具有更少的更新/插入成本。因为sql只需要更新一个索引(复合键)而不是2个索引。