更新层次结构级别

时间:2018-08-14 00:08:34

标签: sqlite recursion updates hierarchy

我们有一个包含父/子关系的表。 我们正在尝试根据父母等级+ 1更新儿童等级 我们目前正在代码循环中看起来像这样:

Dim ParentLevel as Integer = 1

Do While Count > 0

Update [MyTable]
SET [MyLevel] = (SELECT [P].[MyLevel] + 1
                 FROM [MyTable] [P]
                 WHERE [MyTable].[Parent] = [P].[Child]
                   AND [P].[MyLevel] = ParentLevel)
WHERE [MyLevel] IS NULL
  AND [Parent] IN (SELECT [Child]
                   FROM [MyTable] [P]
                   WHERE P.[MyLevel] = ParentLevel);

execute query

ParentLevel = ParentLevel + 1

Loop

此表只有31148条记录。 当ParentLevel低于3或4左右时,更新查询的性能是可以接受的。 但是,此后需要很长时间。因此,我们知道我们一定做错了。

索引位于父级,子级和MyLevel上。

我们尝试了如下所示的其他更新查询,但性能相同:

Update [MyTable]
SET [MyLevel] = (SELECT P.[MyLevel] + 1
                 FROM [MyTable] AS P
                 WHERE [MyTable].[Parent] = P.[Child]
                   AND [P].[MyLevel] = ParentLevel )
WHERE EXISTS (SELECT P.[MyLevel] + 1
              FROM [MyTable] AS P
              WHERE [MyTable].[Parent] = P.[Child]
                AND [P].[MyLevel] = 6);

我们希望有一些SQLite专家对性能更好的更新查询提供建议。

0 个答案:

没有答案