仅添加一行以限制关键字时,MS Sql查询速度会减慢

仅添加一行以限制关键字时,MS Sql查询速度会减慢,sql,sql-server,sql-server-express,Sql,Sql Server,Sql Server Express,我的问题很奇怪。我在编写SQL方面没有那么丰富的经验 但我也不是一个完全的新手。 这个让我思考和寻找至少一个小时 我尝试过的查询(selecttop(19785))(数字很重要)大约在15毫秒内执行,但同一个TOP增加1的查询只执行434毫秒。 有人能解释为什么会这样吗 我在下面附上了截图,所以如果我解释得不好,你可以看到我在说什么 编辑: 另外,忘了提到这个表非常简单,它没有外键,除了两个小数(用于存储纬度和经度)之外,没有其他复杂字段 EDIT2:将查询执行计划附在下面。 编辑3: 很抱

我的问题很奇怪。我在编写SQL方面没有那么丰富的经验 但我也不是一个完全的新手。 这个让我思考和寻找至少一个小时

我尝试过的查询(
selecttop(19785)
)(数字很重要)大约在15毫秒内执行,但同一个TOP增加1的查询只执行434毫秒。 有人能解释为什么会这样吗

我在下面附上了截图,所以如果我解释得不好,你可以看到我在说什么

编辑: 另外,忘了提到这个表非常简单,它没有外键,除了两个小数(用于存储纬度和经度)之外,没有其他复杂字段

EDIT2:将查询执行计划附在下面。

编辑3: 很抱歉犯了这么明显的错误,但我注意到表中实际上有外键,用于国家/地区。 另外,我注意到,如果我删除了TOP(N)和uniqueidentifier(guid)字段,然后用

ORDER BY Id OFFSET M ROWS
FETCH NEXT N ROWS ONLY;
它显示了类似的执行时间(~15毫秒)

这表明我应该分块进行查询,考虑到我正在开发的应用程序中应该有分页功能,这并不是什么大问题


感谢您的帮助,祝您度过愉快的一天。

这可能是世界其他地区目标的影响,(请参阅:)。这就是SQL Server在考虑如何物理检索数据时使用TOP(n)值的地方。通常,SQL Server将使用查询检索的数据分布和可用索引来确定检索模式。

这可能是行目标的影响(请参阅:)。这就是SQL Server在考虑如何物理检索数据时使用TOP(n)值的地方。通常,SQL Server将使用查询检索的数据分布和可用索引来确定检索模式。

您看过查询计划(
EXPLAIN…
)了吗?最有可能的是(不)使用某个索引的成本使您的查询超出了限制。或者重新扫描索引/查询成本,使其与您的数据相对应,或者使用查询提示强制执行“良好”索引。您是否愿意告诉我应该从哪里开始,我将进行研究?我不太擅长索引和重新扫描它们的成本。您可以尝试对这两个值使用相同的查询选项(重新编译)吗。接下来,请尝试重建索引。请为我们提供这两种情况的查询计划。您可以通过按“包含实际执行计划”(或Ctrl\M)来执行此操作。然后运行查询,转到“输出”部分的“执行计划”窗格,使用“另存为”,并将xml复制粘贴到一个站点,如PastePlan.com。然后,给我们提供链接。点击Ctrl+M将实际执行计划包含在结果中,并比较两个查询您是否查看了查询计划(
EXPLAIN…
)?最有可能的是(不)使用某个索引的成本使您的查询超出了限制。或者重新扫描索引/查询成本,使其与您的数据相对应,或者使用查询提示强制执行“良好”索引。您是否愿意告诉我应该从哪里开始,我将进行研究?我不太擅长索引和重新扫描它们的成本。您可以尝试对这两个值使用相同的查询选项(重新编译)吗。接下来,请尝试重建索引。请为我们提供这两种情况的查询计划。您可以通过按“包含实际执行计划”(或Ctrl\M)来执行此操作。然后运行查询,转到“输出”部分的“执行计划”窗格,使用“另存为”,并将xml复制粘贴到一个站点,如PastePlan.com。然后,给我们提供链接。点击
Ctrl+M
将实际执行计划包含在结果中,并比较两个查询