我有张表的结构如下,属于树形的结构表 表名为NODE_TREENODE_ID,PARENT_ID数据类型均为number(10),PARENT_ID=0则为跟节点,NODE_ID为主键,唯一索引,parent_ID也是索引字段。
在节点移动XX时,我需要同步更新NODE_PATH字段。就需要更新该节点下所有子节点NODE_PATH,SQL如下:
UPDATE NODE_TREE A SET NODE_PATH=(
SELECT SYS_CONNECT_BY_PATH(NODE_ID,'/') FROM NODE_TREE B
WHERE A.NODE_ID=B.NODE_ID
START WITH B.PARENT_ID=0 CONNECT BY PRIOR B.NODE_ID=B.PARENT_ID
) WHERE A.NODE_ID IN (
SELECT NODE_ID FROM NODE_TREE START WITH NODE_ID=XX CONNECT BY PRIOR NODE_ID=PARENT_ID
)
此表目前数据量35000,若XX节点下子节点数量在2000左右,查询速度很慢,耗时20分钟,几百条都需要80多秒。
求优化方案
在节点移动XX时,我需要同步更新NODE_PATH字段。就需要更新该节点下所有子节点NODE_PATH,SQL如下:
UPDATE NODE_TREE A SET NODE_PATH=(
SELECT SYS_CONNECT_BY_PATH(NODE_ID,'/') FROM NODE_TREE B
WHERE A.NODE_ID=B.NODE_ID
START WITH B.PARENT_ID=0 CONNECT BY PRIOR B.NODE_ID=B.PARENT_ID
) WHERE A.NODE_ID IN (
SELECT NODE_ID FROM NODE_TREE START WITH NODE_ID=XX CONNECT BY PRIOR NODE_ID=PARENT_ID
)
此表目前数据量35000,若XX节点下子节点数量在2000左右,查询速度很慢,耗时20分钟,几百条都需要80多秒。
求优化方案
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货