ネストされたセット階層モデルをいじっていて、CategoryID int Identity、CategoryName nvarchar(100)、L int、R int、CreatedOn datetime、UpdatedOndatetimeのフィールドを持つCategoryNestというカテゴリテーブルがあります。
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レコードでテストすると、1時間以上かかります(注:クエリの実行はキャンセルされました)。
編集:編集したクエリを適用した後、結果はより速くなければなりませんが、私はまだ物事をさらにスピードアップするための提案を受け入れています。
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
このクエリを最適化して、数時間ではなく数秒以内に結果を取得する方法があるかどうか疑問に思いました。
編集:これ以上の時間はありません、それを世話しましたが、それでも物事をスピードアップするための提案を受け入れています。
ありがとうございました。