我有一个表,看起来像这样(我不知道,什么都可能是相关的,所以我不得不蟾蜍转储整个结构)SQL Server 2005的查询与子查询的最大
CREATE TABLE [dbo].[TScore] (
[CustomerID] int NOT NULL,
[ApplNo] numeric(18, 0) NOT NULL,
[BScore] int NULL,
[OrigAmt] money NULL,
[MaxAmt] money NULL,
[DateCreated] datetime NULL,
[UserCreated] char(8) NULL,
[DateModified] datetime NULL,
[UserModified] char(8) NULL,
CONSTRAINT [PK_TScore]
PRIMARY KEY CLUSTERED ([CustomerID] ASC, [ApplNo] ASC)
);
和优化当我运行以下查询时(在TScore表中有300万条记录的数据库上),即使如果我这样做:Select BScore from CustomerDB..TScore WHERE CustomerID = 12345
,它是即时的(并且只返回10条记录),似乎需要大约一秒钟的时间应该有一些有效的方法来在单个查询中执行Max(ApplNo)
效果,但我是SQL Server的相对技术人员,但并不确定 - 我想我可能需要ApplNo的单独密钥,但不知道如何聚集钥匙工作。
SELECT BScore
FROM CustomerDB..TScore (NOLOCK)
WHERE ApplNo = (SELECT Max(ApplNo)
FROM CustomerDB..TScore sc2 (NOLOCK)
WHERE sc2.CustomerID = 12345)
感谢任何提示(在哪里找的SQL服务器上的东西优化指针赞赏和)
非常感谢您的帮助 - 对于NOLOCK小贴士 - 目前在任何地方都可以使用它,并且在我开始这项工作时,我专门告诉我在任何地方都会使用它,因此需要一点工作才能说服别人 - 关于p。的文章的任何提示特别好呢? (我搜索了一下,发现了一对看起来很合理的对象,只要你知道任何特别好的答案就回复) –
只需搜索上面的“user:27535 nolock” – gbn