我的查询中有一个奇怪的问题。我没有编写SQL的经验 查询,但我也不是新手。 这个让我一直在思考和搜索至少一个小时。
我尝试过的查询(SELECT TOP (19785)..
)(数字很重要)大约在15毫秒内执行,但是将top仅仅增加1的同一查询执行434毫秒。
有人可以解释为什么会这样吗?
我在下面附上了屏幕截图,所以如果我讲得不好的话,您可以看到我在说什么。
编辑: 另外,忘了提到此表非常简单,它没有外键,除了两个小数点(用于存储纬度和经度)之外,没有其他复杂字段
EDIT2:附加了下面的查询执行计划。 https://www.brentozar.com/pastetheplan/?id=H1PLtgkSN
EDIT3: 很抱歉使这个错误显而易见,但我注意到该表实际上具有该国家的外键。 另外,我注意到,如果我删除了TOP(N)和uniqueidentifier(guid)字段,然后用
重新设置了两个查询ORDER BY Id OFFSET M ROWS
FETCH NEXT N ROWS ONLY;
显示类似的执行时间(〜15 ms)
这表明我应该分块进行查询,考虑到我应该在正在处理的应用程序中进行分页,这并不是一个大问题。
感谢您的帮助,祝您愉快。
答案 0 :(得分:0)
这可能是行目标的效果(请参阅:https://sqlperformance.com/2018/02/sql-plan/setting-and-identifying-row-goals)。这是SQL Server在考虑如何物理检索数据时使用TOP(n)值的地方。通常,SQL Server将使用查询要检索的数据分布以及可用的索引来确定检索模式。