【发布时间】:2014-04-12 11:10:45
【问题描述】:
我在 SqlServer 2008 R2 中运行此查询,大约需要 6 秒并返回大约 8000 条记录。 OrderItemView 是视图,DocumentStationHistory 是表。
SELECT o.Number, dsh.DateSend AS Expr1
FROM OrderItemView AS o INNER JOIN
DocumentStationHistory AS dsh ON dsh.DocumentStationHistoryId =
(SELECT TOP (1) DocumentStationHistoryId
FROM DocumentStationHistory AS dsh2
WHERE (o.DocumentStationId = ToStationId) AND
(DocumentId = o.id)
ORDER BY DateSend DESC)
WHERE (o.DocumentStationId = 10)
但是当我使用 o.DocumentStationId = 8 where 子句运行相同的查询时,它会返回大约 200 条记录,但需要大约 90 秒!
你知道问题出在哪里吗?
【问题讨论】:
-
查看查询计划了解详情。我假设,优化器会根据您的更改选择不同的计划。
-
o.DocumentStationId上有索引吗? -
或者它可能使用相同的缓存计划并产生相同的后果。比较两个查询的实际执行计划并报告。
标签: sql sql-server performance