【发布时间】:2009-08-14 19:40:33
【问题描述】:
我之前发布过一个关于我使用 XML 列的查询速度的问题。经过一些进一步的调查,我发现它与之前认为的 XML 不同。表模式和查询非常简单。有超过 800K 行,一切都运行顺利,但随着记录的增加,运行几乎需要一分钟。
桌子:
/****** Object: Table [dbo].[Audit] Script Date: 08/14/2009 09:49:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Audit](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PID] [int] NOT NULL,
[Page] [int] NOT NULL,
[ObjectID] [int] NOT NULL,
[Data] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Created] [datetime] NULL,
CONSTRAINT [PK_Audit] 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]
查询:
SELECT *
FROM Audit
WHERE PID = 158
AND Page = 2
AND ObjectID = 93
查询只返回 26 条记录,有趣的是,如果我添加“TOP 26”,查询将在不到一秒的时间内执行,如果我将其更改为“TOP 27”,则需要一分钟。即使我将查询更改为 SELECT ID,也没关系。
感谢任何帮助
【问题讨论】: