我们有一个包含父/子关系的表。 我们正在尝试根据父母等级+ 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专家对性能更好的更新查询提供建议。