gpt4 book ai didi

SQL 服务器 : OFFSET FETCH performs scan while TOP WHERE performs seek?

转载 作者:行者123 更新时间:2023-12-04 21:19:22 24 4
gpt4 key购买 nike

我收到以下两个查询。一个快一个慢。

该表在 Id 列上有一个聚簇索引。

-- Slow, uses clustered index scan reading 100100 rows
SELECT *
FROM [dbo].[Foo]
ORDER BY Id
OFFSET 100000 ROWS FETCH FIRST 100 ROWS ONLY

-- Fast, uses clustered index seek reading 100 rows
SELECT TOP 100 *
FROM [dbo].[Foo]
WHERE Id > 100000
ORDER BY Id

除了一个使用扫描另一个使用搜索之外,这些计划是相同的。

谁能解释为什么或者这就是 OFFSET 的工作原理?

该表非常宽,有几个 NVARCHAR(100-200) 和一个 NVARCHAR(2500) 列。

最佳答案

这两个查询不等价。尽管 可能会假设 id 没有间隔并且从 1 开始,但数据库引擎并不知道这一点。

索引被组织起来以快速找到特定的值。他们通常通过遍历树结构来做到这一点,而树结构通常是平衡的。您可以在 documentation 中阅读更多相关信息.

但是,它们的组织方式无法快速到达表中的第 nth 行。因此,查询需要扫描表以统计行数。

就是说,如果索引保留每个子项中的行数,它可以做你想做的事。请注意,这会使对表的修改变得复杂,因为每次 updateinsertdelete 都需要更新整个层次结构。

关于SQL 服务器 : OFFSET FETCH performs scan while TOP WHERE performs seek?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41740897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com