我们有一个像这样的自引用表
CREATE TABLE Categories(
Id int IDENTITY(1,1) NOT NULL,
Title nvarchar(200) NOT NULL,
ParentId int NULL,
CONSTRAINT PK_Structures PRIMARY KEY CLUSTERED
(
Id ASC
)
CREATE NONCLUSTERED INDEX IX_Structures_ParentId ON Categories
(
ParentId ASC
)
以及获取所有祖先的递归 cte:
Create View Ancestors
as
with A(Id, ParentId) as
(
select Id, Id from Categories
union all
select e.Id, p.ParentId from Categories e
join A p on e.ParentId = p.Id
)
select * from A
现在我们查询给定类别的所有祖先,例如:
select * from Ancestors where Id = 1234
仅包含 100000 个类别的表需要 11 秒,执行计划为. 查询返回给定的 5 行Id
我知道我可以通过 using 大大提高性能hierarchyid
,我也知道有时 usingwhile
可以提高性能,但在这样一个简单的情况下,我希望看到更好的性能。另外,请注意我已经有一个索引ParentId
(图片显示的表格是问题中提到structure
的表格的实际名称。Category
是否有调整可以大大提高此性能?