【发布时间】:2013-03-20 14:04:19
【问题描述】:
我有一个查询要从 tableA 中选择一些数据来匹配 tableB 中的一些行。尽管它的工作原理很慢,但返回几百行大约需要 20 分钟。这是查询,希望您有一些建议可以改进或更改。
我使用的是 SQL Server 2008
DECLARE @MaxDate DATETIME
SELECT @MaxDate = MAX(TimeStamp) -- I know it's not the best column name
FROM tableA
WHERE CodeName IN
(SELECT Tag FROM TableB
WHERE POSITION = 'UP' AND PLACE = 'Shelf')
IF @MaxDate > '2011-08-08'
BEGIN
SELECT @MaxDate = MAX(TimeStamp) -- I know it's not the best column name
FROM tableA
WHERE CodeName IN
(SELECT Tag FROM TableB
WHERE POSITION = 'UP' AND PLACE = 'Shelf')AND TimeStamp >= '2008-12-24' AND TimeStamp < '2010-12-24'
END
ELSE
PRINT 'Date out of range'
【问题讨论】:
-
可以显示执行计划吗?
-
@Bender 。 . .这些桌子有多大?我怀疑您使用的是视图而不是表,这就是性能问题所在。
-
您在
tableA上是否有超过(TimeStamp, CodeName)的覆盖索引?tableB上的覆盖索引是否超过(POSITION, PLACE)? -
这些表真的很大,因为数据每 2 分钟更新一次,这就是为什么我在选择只包含特定条件的情况下进行查询。
-
你可以试试多快:SELECT YourPrimaryKey, TimeStamp FROM tableA WHERE CodeName IN (SELECT Tag FROM TableB WHERE POSITION = 'UP' AND PLACE = 'Shelf')
标签: sql sql-server database performance sql-server-2008