gpt4 book ai didi

sql - 'Deleted' 标志应该有索引吗?

转载 作者:行者123 更新时间:2023-12-05 03:14:22 27 4
gpt4 key购买 nike

在我的 SQL Server 2008 R2 数据库中,我们使用软删除(一个可为空的 DateTime 列,称为“已删除”)。

这是在我们数据库中的每个表上。

我一直在添加索引,主要基于较大的表,在 WHERE 子句中常​​用的列上,或者在 JOIN ON 子句上。

不过,我的问题是,我是否也应该在所有这些索引中包含 DELETED 列,因为大多数时候,我可能会做如下事情:

SELECT ....
FROM TableA a
INNER JOIN TableB b
ON b.TableAId = a.Id
AND b.Deleted IS NULL
WHERE a.AFieldId = x

在那种情况下,拥有这样的索引是否有益:

CREATE NONCLUSTERED INDEX idx_TableA
ON [dbo].[Tableb] (TableAId, [Deleted])

因此,由于我的大部分查询都检查已删除的标志,所以它们都应该是这样的吗?

最佳答案

您可以使用过滤索引减小索引的大小:

CREATE NONCLUSTERED INDEX idx_TableA
ON [dbo].[Tableb] (TableAId)
WHERE ( [Deleted] IS NULL )

当然,最适用的索引几乎都是覆盖索引:

CREATE NONCLUSTERED INDEX idx_TableA
ON [dbo].[Tableb] (TableAId)
INCLUDE ( column list )
WHERE ( [Deleted] IS NULL )

引用:CREATE INDEX

Create Filtered Indexes

关于sql - 'Deleted' 标志应该有索引吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com