【问题标题】:Sql Server table structureSql Server 表结构
【发布时间】:2012-10-23 11:26:02
【问题描述】:

我有以下数据要上传:

(Pair)    (Date)    (Time)       (Bid)   (Ask)
EurUsd  01/01/2012  18:04:01    1.55037 1.55137
EurUsd  01/01/2012  18:04:20    1.55018 1.55118
EurUsd  01/01/2012  18:04:22    1.55031 1.55131
EurUsd  01/01/2012  18:04:36    1.55045 1.55145
EurUsd  01/01/2012  18:04:40    1.55058 1.55158
EurUsd  01/01/2012  18:04:40    1.5508  1.5518

GbpUsd  01/01/2012  18:06:11    1.55097 1.55197
GbpUsd  01/01/2012  18:06:22    1.55117 1.55217
GbpUsd  01/01/2012  18:06:24    1.55128 1.55228
GbpUsd  01/01/2012  18:06:38    1.55098 1.55198

数据类型如下:Nchar(6)、Date、Time、Decimal、Decimal。

不幸的是,我不能保证每分钟的行都是唯一的。我还将每天和其他对向此表添加数据。

问题 1)。为上述数据设置 PK 的最佳方法是什么。我假设我应该只设置一个名为“Id”的新列,类型为 BigInt,并将其“Is Identity”设置为 Yes?然后将PK设置为“Id”?

问题 2)。聚集索引,基于“对”、“日期”、“时间”?

问题 3)。我假设如果我在表中设置一个“Id”列,我需要对我用来上传数据的任何 sqlbulkcopy 操作进行 ColumnMapping?或者一旦设置了“Is Identity”属性,就无法将数据加载到列中?

感谢您的宝贵时间。

【问题讨论】:

  • 对于问题2和3,下面的AnandPhadake给出了看法。对于问题 1,是的,这是正确的做法,即自动递增 id 列作为 PK。

标签: sql-server sql-server-2008 primary-key clustered-index


【解决方案1】:

1.要设置 PK,我建议您可以使用 GUID(uniqueidentifier) 并使用 NEWSEQUENTIALID() 将数据自动填充到表中。(这将成为聚集索引键)

2.我猜在 ("Pair","Date", "Time") 列的集合上不需要聚集索引。如果您在 where 子句中经常使用这些列中的任何一个,那么我更喜欢非这些列上的聚集索引。

3.当涉及到 sqlbulkcopy - 您可以映射您想要在表中插入数据的唯一列。

【讨论】:

  • bcos OP 提到了 bigint。如果有大量记录,则 GUID 否则身份很好
  • 请您评论一下为什么您更喜欢数字 (2) 的非聚集索引而不是聚集索引。
  • 非聚集索引将在 where 子句中为您提供帮助,在该子句中您不是获取范围内的记录而是随机记录
猜你喜欢
  • 2019-08-10
  • 1970-01-01
  • 2011-05-19
  • 2011-06-23
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多