我有一个包含查找表的外键的父表(简化示例):
CREATE TABLE [dbo].[Parent] (
[Id] [uniqueidentifier] NOT NULL,
[LookupId] [uniqueidentifier] NULL
)
CREATE TABLE [dbo].[Lookup] (
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](64) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,该Parent表有超过 1000 万行,而该Lookup表大约有 5000 行。真正的Parent实现有几个这样的对其他表的外键引用,并且这些列中的每一个都可能包含 NULL。
两个示例表的Id列都具有唯一的聚集索引,Parent具有 的非聚集索引LookupId和Lookup的非聚集索引Name。
我正在运行一个分页查询,我想在结果中包含查找值:-
SELECT
P.Id,
L.Name
FROM Parent P
LEFT JOIN Lookup L ON P.LookupId = L.Id
ORDER BY P.Id
OFFSET 500000 ROWS FETCH NEXT 50 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
这运行得很快,按 排序也是如此P.LookupId。 …