【发布时间】:2019-09-07 07:15:39
【问题描述】:
我有一个查询对我们的 microsoft sql 数据库来说很慢。如果我删除它的一部分,它会加快速度,但我不明白为什么并且查询规划器没有帮助我(我缺少一些东西)。
超过 30 秒的慢查询 (queryplan):
SELECT COUNT(*)
FROM [dbo].[CarImage] AS [t0]
LEFT OUTER JOIN [dbo].[Dismantled] AS [t1] ON [t1].[Id] = [t0].[DismantledId]
WHERE([t1].[FinishedReason] <> 0)
AND ([t1].[FinishedDate] < GETDATE() - 365)
AND (NOT(EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[Part] AS [t2]
WHERE([t2].[Status] <> 4)
AND ([t2].[Status] <> 3)
AND ([t2].[DismantledId] = [t1].[Id])
)))
AND (NOT(EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[Part] AS [t3]
WHERE([t3].[Status] = 3)
AND ([t3].[SoldDate] > GETDATE() - 365)
AND ([t3].[DismantledId] = [t1].[Id])
)))
AND ((NOT(EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[Partner] AS [t4],
[dbo].[SelfPickSite] AS [t5]
WHERE([t4].[Id] = [t1].[PartnerId])
AND ([t5].[PartnerId] = [t4].[Id])
)))
OR (EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[SelfPickCar] AS [t6]
WHERE [t6].[DismantledId] = [t1].[Id]
)));
如果我删除最后一部分,则为 queryplan):
SELECT COUNT(*)
FROM [dbo].[CarImage] AS [t0]
LEFT OUTER JOIN [dbo].[Dismantled] AS [t1] ON [t1].[Id] = [t0].[DismantledId]
WHERE([t1].[FinishedReason] <> 0)
AND ([t1].[FinishedDate] < GETDATE() - 365)
AND (NOT(EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[Part] AS [t2]
WHERE([t2].[Status] <> 4)
AND ([t2].[Status] <> 3)
AND ([t2].[DismantledId] = [t1].[Id])
)))
AND (NOT(EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[Part] AS [t3]
WHERE([t3].[Status] = 3)
AND ([t3].[SoldDate] > GETDATE() - 365)
AND ([t3].[DismantledId] = [t1].[Id])
)))
AND ((NOT(EXISTS
(
SELECT NULL AS [EMPTY]
FROM [dbo].[Partner] AS [t4],
[dbo].[SelfPickSite] AS [t5]
WHERE([t4].[Id] = [t1].[PartnerId])
AND ([t5].[PartnerId] = [t4].[Id])
))));
【问题讨论】:
-
您能否详细介绍一下查询和您删除的部分?没有任何上下文,将无法为您提供帮助
-
对不起,我在添加所有内容之前不小心发布了。现已更新。
标签: sql sql-server query-performance