Sql Server 2008 中 Top Clause 的最佳替代方案?

问题描述 投票:0回答:3

我正在处理一个当前包含 100000 条记录的表,并且将来会越来越多,现在我的客户想要最新的前 10 条记录...

使用 top 子句会降低性能,并且由于这是移动应用程序,性能是唯一关心的问题,因此是否有任何替代方法和获取最新前 10 条记录的最佳方法,并且 order by 可能会导致性能损失

这两个有没有最好的性能替代方案..

sql-server-2008 sql-order-by clause
3个回答
6
投票

使用 TOP 子句只会损害性能,因为您在日期字段(或用于识别最新 10 个字段的任何字段)上没有正确的索引。对于这样的查询:

SELECT TOP 10 OrderID, OrderDate, TotalPrice, Shipping, Status
FROM CustomerOrder
ORDER By OrderDate DESC

您(理想情况下)需要以下索引:

(OrderDate, OrderID) INCLUDE (TotalPrice, Shipping, Status)

3
投票

我认为最好的选择是使用另一个有最新 10 条记录的表。

所以,当你的应用程序插入一条记录时,它必须将其记录在两个表中......大的一个和前 10 个。或者可以做一个触发器来完成这项工作。


0
投票

您必须对此进行基准测试,但

set rowcount 10 select ...
可以替代
select top 10 ...
。 查询计划可能更好也可能更差。

记住之后立即

set rowcount 0
,否则您将把以后的所有查询限制为 10 行。

© www.soinside.com 2019 - 2024. All rights reserved.