为每个具有IsActive字段的表提供视图是否常见?

时间:2011-02-17 18:50:27

标签: sql sql-server tsql view

我有几个具有IsActive列的表,它指示记录是活动的还是已删除的。这些表经常使用。

为每个表创建一个视图并仅选择IsActive为true的记录是否常见?或者这有点过头了吗?

3 个答案:

答案 0 :(得分:3)

视图只是一个存储的查询 - 无论是在视图中还是在where子句中检查isActive,它都将以完全相同的方式执行。

如果您发现自己经常使用isActive行,请查看filtered indexes。例如,我们有一个票务系统,其中99%的活动与开放票证有关。通过仅为活动票证添加过滤索引,我们能够大大提高性能。

答案 1 :(得分:2)

  

为每个表创建一个视图并仅选择IsActive为true的记录是否常见?或者这有点过头了吗?

没有过多的设计可疑。

该方法通常被称为“软”删除,其中记录标记有特定状态以控制其可见性。这会占用空间,但可以轻松恢复记录 - 否则您将无法从备份中恢复(或者更糟糕的是 - 事务日志)。

我不会使用视图来查看表中的内容。非物化视图只是一个宏,它将视图引用替换为它封装的查询 - 对于给定查询中的每个实例。由此可以获得轻微的性能优势,因为可能会缓存基础查询。物化视图(SQL Server术语中的索引视图)比非物化视图更好,但是只需索引状态列(2008+,过滤索引可能是一个考虑因素),您也可以这样做。在实际的表中也没有杂乱。这取决于,所以你最终必须测试&根据数据和自己看到自己设置。

根据状态对原始表进行分区是查询性能的另一种可能性,但仍需要在查询中进行规范。

答案 2 :(得分:0)

虽然可能值得为这个观点编制索引。它取决于活动/非活动拆分。 非索引视图只是一个扩展的宏,它总是很有诱惑力,当你将视图连接到视图等时添加JOINS的bollix性能

使用SQL Server 2008在IsActive上添加过滤索引