我有一个表,某周有大约 18k 行,另一周有 22k 行。
我正在使用视图和索引来检索数据,就像这样
SELECT TOP 100 * FROM my_view
WHERE timestamp BETWEEN @date1 AND
@date2
但不知何故,有 22k 的一周检索数据的速度更快(大约 3-5 秒),而另一个则至少需要一分钟。这些导致我的 wcf 超时。我错过了什么?
我有一个表,某周有大约 18k 行,另一周有 22k 行。
我正在使用视图和索引来检索数据,就像这样
SELECT TOP 100 * FROM my_view
WHERE timestamp BETWEEN @date1 AND
@date2
但不知何故,有 22k 的一周检索数据的速度更快(大约 3-5 秒),而另一个则至少需要一分钟。这些导致我的 wcf 超时。我错过了什么?
在时间戳字段上应用索引。
如果您已经有时间戳索引,请检查执行计划中用于此查询的索引。
索引提示只会在您的查询涉及连接表的情况下发挥作用,并且用于连接到另一个表的列与多个索引匹配。在这种情况下,数据库引擎可能会选择使用一个索引来进行连接,并且从调查中您可能会知道,如果它使用另一个索引,则查询将执行得更好。在这种情况下,您提供索引提示,告诉数据库引擎使用哪个索引。
示例代码使用索引提示:
select [Order].[OrgId], [OrderDetail].[ProductId]
from [Order]
inner join [OrderDetail] **with(index(IX_OrderDetail_OrderId))** on [Order].[OrderId] = [OrderDetail].[OrderId]