我在搞乱嵌套集层次模型,并有一个名为 CategoryNest 的类别表,其中包含字段 CategoryID int identity、CategoryName nvarchar(100)、L int、R int、CreatedOn datetime、UpdatedOn datetime。
Note: "Store" is a schema in MS SQL Server.
SELECT CategoryID,
node AS CategoryName,
(
SELECT
'/' + CAST(parent.CategoryID AS nvarchar(max))
FROM
Store.CategoryNest node,
Store.CategoryNest parent
WHERE
node.L BETWEEN parent.L AND parent.R
AND node.CategoryID = Category.CategoryID
FOR XML PATH('')
) AS BreadcrumbIDs
FROM
/* EDIT: this was an unnecessary join.
Removing it, helped me get results must faster.
(
SELECT
node.CategoryID,
node.CategoryName node,
parent.CategoryName parent
FROM
Store.CategoryNest node,
Store.CategoryNest parent
WHERE
node.L BETWEEN parent.L AND parent.R
) AS Category
*/
Store.CategoryNest Category
GROUP BY
node,
CategoryID
查询工作正常,它会生成所需的输出,但在使用 458,000 条记录进行测试时,需要一个多小时(注意:查询执行已取消)。
编辑:应用我编辑的查询后,结果必须更快,但我仍然愿意接受进一步加快速度的建议。
Sample results:
CategoryID CategoryName Breadcrumbs
1 ROOT /1
2 A /1/2
3 AA /1/2/3
4 AAA /1/2/3/4
5 B /1/5
6 C /1/6
7 CC /1/6/7
我想知道是否有办法优化此查询以在几秒钟而不是几小时内获得结果。
编辑:没有更多的时间,解决了这个问题,但仍然对加快速度的建议持开放态度。
谢谢你。