我有两张桌子
主要表格PostInfo
列,如(PostID
,PostSubject
,PostedDate
,IsProcessed
)。每个帖子ID的一个条目
交易表Post_Transaction
PostID PostComments Post_InsertedOn UserID
--------------------------------------------------------------------
10000 VRDFHFGFTR 2013-10-26 21:08:19.817 43434
10000 GFDGDFSDFF 2013-10-26 21:12:32.323 67576
10000 HGFHGFBNBF 2013-10-26 21:43:43.545 3232
10000 JNFNGHFGHG 2013-10-26 21:45:46.656 768
10000 MJHJNGJHGH 2013-10-26 21:56:32.767 9897
10001 XCVGFDGDFG 2013-10-26 22:54:54.868 3424
10001 YTUGFGHHGF 2013-10-26 13:32:54.132 12313
10001 HGFHFGHGHF 2013-10-26 18:08:32.878 6565
clustered unique index
表格中的PostID
列上有PostInfo
。
Clustered non unique index
表格PostID
列上的 Post_Transaction
。这个non unique clustered index(Post_Transaction)
可以有效运行多远,因为PostID
表格中的每个Post_Transaction
都会有50000多个条目。
Or
我需要在IdentID
table.so中创建一个标识列(Post_Transaction
),我可以在Clustered unique index
列IdentID
列创建Non clustered non unique index
在PostID
表格Post_Transaction
上。
我需要继续哪种方式,请提出建议。 : - )
答案 0 :(得分:0)
仅向其上的群集添加身份可能是一个糟糕的选择。
使用非唯一的聚簇索引,Sql会为每一行(4个字节)添加一个隐藏的uniquifier,这不是一个大问题。群集密钥的选择是根据该表上的查询以及应该排序的事实来完成的,以便不根据应用程序分割太多并且在范围中检索(通常选择身份或日期)。 如果您经常在PostInsertedOn上搜索,那么它可能是一个不错的选择。 如果在PostId上完成了更多的查询,那么它最好是第一个。 我猜PostTransactions经常通过 PostId + PostInsertedOn 进行搜索,这可能是一个不错的选择(如果PostInsertedOn可以复制,则非唯一)。
但最好的方法是使用您的应用程序和查询计划的查询来检查。
另请注意,群集密钥将是作为表的查找键添加的所有其他索引的隐藏部分。