以下查询的成本的90%是根据与针对主键索引的群集扫描相关的执行计划。每次执行的平均持续时间约为2秒。我们的应用程序中的执行计数非常高,因此会导致较大的负载。您可以通过索引或重组查询帮助我改进吗?
CREATE TABLE [dbo].[EventLog](
[Id] [uniqueidentifier] NOT NULL,
[StartTime] [datetime] NOT NULL,
[StopTime] [datetime] NULL,
[executionStatus] [smallint] NOT NULL,
[executionType] [smallint] NOT NULL,
[Info] [xml] NULL,
CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY];
GO
SELECT TOP(1) execution.Id,
StartTime,
StopTime,
executionStatus,
executionType,
execution.Info
FROM dbo.EventLog execution INNER JOIN
(SELECT Id,
cast(Info as VARCHAR(MAX)) as Info
FROM dbo.EventLog
WHERE (executionType=1 OR executionType=4)
AND executionStatus=1
AND StopTime IS NOT NULL) as SUBQ
on execution.Id=SUBQ.Id
WHERE SUBQ.Info LIKE '%<Name>For Trial</Name>%'
AND SUBQ.Info LIKE '%<Type>2</Type>%'
ORDER BY StartTime DESC;
GO
提前致谢!
答案 0 :(得分:0)
什么是Join的使用?只需放下它并将所有条件移到里面&#39;分支。