使用 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 并检索整个附件(可能非常大)只是为了表明附件存在。这显然非常缓慢。
一位程序员建议创建一个单独的文件,其中包括 TripID
、hasAttachment1
、hasAttachment2
、hasAttachment3
等。然后一些进程会保留这个 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
我们正在使用 SQL 服务器和 SSMS 18.4。
我们有一个 TripAsset
table 包含这些列:
TripAssetID
TripID
Attachment1
Attachment2
Attachment3
我们有一个网格视图,其中列出了行程和行程文件中的数据。网格中的每一行必须表明行程有 Attachment1、Attachment2、Attachment3 等。
执行此操作的 SQL 加入 TripAsset
table 并检索整个附件(可能非常大)只是为了表明附件存在。这显然非常缓慢。
一位程序员建议创建一个单独的文件,其中包括 TripID
、hasAttachment1
、hasAttachment2
、hasAttachment3
等。然后一些进程会保留这个 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