我正在处理一个当前包含 100000 条记录的表,并且将来会越来越多,现在我的客户想要最新的前 10 条记录...
使用 top 子句会降低性能,并且由于这是移动应用程序,性能是唯一关心的问题,因此是否有任何替代方法和获取最新前 10 条记录的最佳方法,并且 order by 可能会导致性能损失
这两个有没有最好的性能替代方案..
使用 TOP 子句只会损害性能,因为您在日期字段(或用于识别最新 10 个字段的任何字段)上没有正确的索引。对于这样的查询:
SELECT TOP 10 OrderID, OrderDate, TotalPrice, Shipping, Status
FROM CustomerOrder
ORDER By OrderDate DESC
您(理想情况下)需要以下索引:
(OrderDate, OrderID) INCLUDE (TotalPrice, Shipping, Status)
我认为最好的选择是使用另一个有最新 10 条记录的表。
所以,当你的应用程序插入一条记录时,它必须将其记录在两个表中......大的一个和前 10 个。或者可以做一个触发器来完成这项工作。
您必须对此进行基准测试,但
set rowcount 10 select ...
可以替代 select top 10 ...
。 查询计划可能更好也可能更差。
记住之后立即
set rowcount 0
,否则您将把以后的所有查询限制为 10 行。