【发布时间】:2017-05-03 14:12:23
【问题描述】:
我的表中有可以为空的 DeletedDate 列,每当我针对这些表编写查询时,我通常都会检查以确保 DeletedDate IS NULL。我的想法是,如果我创建一个名为 IsDeleted 的索引的、持久的、计算的列,它可能会加快我的查询速度,因为它只需要检查一个位值而不是它索引一系列日期。
[IsDeleted] AS (isnull(CONVERT([bit],case when [DeletedDate] IS NULL then (0) else (1) end),(0))) PERSISTED NOT NULL,
但是,我查看了执行计划,它似乎仍在查看DeletedDate 列(我想,我可能读错了计划)。
对于只关心列是否为空的查询,这样做是否有任何意义,或者是否有不同的方法可以加快它的速度?
【问题讨论】:
-
记录被删除的比例是多少?
-
@GordonLinoff 目前很少,但我们还没有完全启动应用程序
-
如果是这种情况,那么您正在寻找性能改进的地方,但您还不知道您从一开始就有性能问题。这就是过早优化的定义。如果你要求的是纯粹的百科知识,恐怕找到答案的最好方法就是自己尝试并衡量它。
-
查询表时,DeletedDate 上的谓词是 only 谓词,还是只是其中之一?
-
@BenThul 我们通常会过滤查询中的几列。
标签: sql sql-server sql-server-2008-r2 query-performance