使用 SQL 服务器索引来提高性能

Using SQL Server indexes to increase performance

我们正在使用 SQL 服务器和 SSMS 18.4。

我们有一个 TripAsset table 包含这些列:

TripAssetID
TripID
Attachment1
Attachment2
Attachment3

我们有一个网格视图,其中列出了行程和行程文件中的数据。网格中的每一行必须表明行程有 Attachment1、Attachment2、Attachment3 等。

执行此操作的 SQL 加入 TripAsset table 并检索整个附件(可能非常大)只是为了表明附件存在。这显然非常缓慢。

一位程序员建议创建一个单独的文件,其中包括 TripIDhasAttachment1hasAttachment2hasAttachment3 等。然后一些进程会保留这个 table 与 TripAsset table 同步。

我认为必须有更好的方法,所以我这样创建了索引 tripHasAttachment1

CREATE INDEX tripHasAttachment1
ON [dbo].[TripAsset] (TripID)
WHERE [TripAsset].[Attachment1] IS NOT NULL

现在我可以 运行 如下查询,其中 tripID 是我想查看是否有附件的旅行。

SELECT TripID 
FROM TripAsset WITH(INDEX(tripHasAttachment1)) 
WHERE TripID = [tripID]

这似乎 运行 很快。

这是解决这个问题的最佳方法吗?我需要 with 子句吗?

如有任何建议,我将不胜感激。

您不需要检索附件来检查它是否存在:

Select
  TripAssetID,
  TripID,
  HasAttachment1 = Cast((Case When Attachment1 Is Null Then 0 Else 1 End) As Bit),
  HasAttachment2 = Cast((Case When Attachment2 Is Null Then 0 Else 1 End) As Bit),
  HasAttachment3 = Cast((Case When Attachment3 Is Null Then 0 Else 1 End) As Bit)
From
  TripAsset