如何改进以下查询(使用LIKE过滤XML)?

时间:2015-01-23 07:24:21

标签: sql sql-server sql-server-2008-r2

以下查询的成本的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

提前致谢!

1 个答案:

答案 0 :(得分:0)

什么是Join的使用?只需放下它并将所有条件移到里面&#39;分支。