近期生产业务中,有一批导入数据,数据量大约16万多,由于需要做树查询,涉及一个层级关系维护。前期,实施维护的时候由于sql问题,导致除一级数据外的下级数据(总共六级)大量维护出错,导致现在需要将这16万数据层级关系全部重新维护。
表中,有一个编码字段(以下用task_code表示),同时维护其父项的task_code(一下称parent_task_code)。
现任务是需要将这16w多的数据在表中找到每个数对应的父项目的编码,然后将父项目的id维护到当前数据的parent_id中去。
原sql是这样的
由于导入数据id是手工维护的,主键id都是以LIGZ为开头的生成的流水号,所以sql意思是,首先根据id定位出所有的导入数据,然后由于一级任务不需要维护父任务,所以过滤掉所有的一级任务,然后由于需要有一个PROJECT_CODE的过滤条件,所有过滤掉所有没有维护PROJECT_CODE(其实基本上都是有PROJECT_CODE的)的数据,可以看到需要更新的数据大概是13w多。
先不看sql,我们来看下执行计划