首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server (2005) -在DATETIME和Indexing上删除

SQL Server (2005) -在DATETIME和Indexing上删除
EN

Stack Overflow用户
提问于 2009-11-24 00:31:32
回答 3查看 239关注 0票数 2

我有一个与数据库设计相关的问题。我正在使用的数据库需要以某种方式处理数据,使其永远不会被物理删除。我们开始向一些表添加"DeleteDateTime“列,即默认情况下为NULL,但一旦标记,就会将记录标记为已删除。

这让我们能够轻松地将数据归档,但我仍然对一些领域一无所知,特别是这是否符合最佳实践,以及如何有效地对这些表进行索引。

我给您举个例子:我们有一个名为“Course”的表,它有一个由"SiteID“和"CourseID”列组成的复合主键。该表还有一个名为"DeleteDateTime“的列,它是根据我上面的描述使用的。

我无法使用SQL Server 2008筛选视图功能,因为我们必须与SQL Server 2005兼容。我应该在这个表的聚集索引中包含"DeleteDateTime“吗?如果是,它是否应该是索引中的第一列(即"DeleteDateTime,SiteID,CourseID")...

有没有人有任何理由让我应该或不应该遵循这种方法?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-24 00:36:31

有没有可能将这些“死”记录转移到一个单独的表中?例如,对于您的Courses表,有一个Courses_deleted表或类似的东西,具有相同的结构。

当您“删除”一条记录时,您基本上只是将其移动到“死表”中。这样,你实际的当前数据的索引就会保持小而灵活……

如果您需要有一个聚合视图,您可以随时定义一个将两个表合并在一起的Courses_View

您的实际表上的聚集索引应该尽可能小、静态、恒定并且尽可能小,所以我绝对不建议在其中放入这样一个日期时间列。这不是个好主意。

有关如何选择一个好的集群密钥以及需要做些什么的优秀信息,请查看Kimberly Tripp的博客条目:

  • GUIDs as PRIMARY KEYs and/or the clustering key
  • The Clustered Index Debate Continues...
  • Ever-increasing clustering key - the Clustered Index Debate..........again!

Marc

票数 3
EN

Stack Overflow用户

发布于 2009-11-24 00:40:36

您对数据保留的要求是什么?您是否查看了审核日志,而不是将所有非最新数据保留在数据库中?

我认为对于包括"DeleteDateTime“列在内的复合索引来说,这是非常正确的。

票数 2
EN

Stack Overflow用户

发布于 2009-11-24 02:49:48

我会创建一个视图,基本上是

代码语言:javascript
复制
select {List all columns except the delete flag} 
from mytable 
where deletflag is null

这就是我在表上的所有查询中使用的内容。原因是为了防止人们忘记考虑deleted标志。SQL Server2005可以很容易地处理这种视图,如果您要将此设计用于删除记录,则有必要使用此设计。我将在delted列上有一个单独的索引。我可能不会让它成为聚集索引的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1784296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档