gpt4 book ai didi

sql-server - 特定列的最佳索引经常用 IS NULL 过滤?

转载 作者:行者123 更新时间:2023-12-02 21:23:44 24 4
gpt4 key购买 nike

我有点不确定表中特定列使用的最佳索引。

我有一个 [Deleted] 列,它是一个日期时间,代表记录从系统中“删除”的时刻(这是软删除,因此物理记录本身​​不会被删除)。

几乎所有命中表的查询都会有一个“WHERE [Deleted] IS NULL”过滤器。我并不担心没有此过滤器的查询的性能。

针对这种情况构建的最佳索引是什么?过滤索引 WHERE [Deleted] IS NULL?定义 IsDeleted = Deleted IS NOT NULL 的计算列上的索引我有点不确定。

最佳答案

正如您所说,几乎所有查询都会包含此子句。我建议在表中添加一个 BIT 列,一旦删除一行(软删除),将其设置为 1。同时将此日期时间列保留为 Deleted_Datetime 以跟踪记录何时被删除。

然后在该 BIT 字段上创建一个过滤索引,例如

CREATE NONCLUSTERED INDEX NCIX_Deleted_Data
ON dbo.Table(Deleted)
WHERE Deleted = 0

Bit 是最小的数据类型,对其进行过滤索引将为您带来巨大的性能提升。

您也可以在日期时间列上创建此筛选索引。但逻辑是在这种情况下,sql server 将必须检查索引上的 8 字节数据来查看行是否被过滤。

然而,如果您有位列,则 SQL Server 将必须遍历 1 个字节的数据才能将其过滤掉或保留它。

较小的数据可以快速处理,较大的数据可以有更多的时间来处理它:)。

关于sql-server - 特定列的最佳索引经常用 IS NULL 过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064030/

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