sql关联查询的时候查询所有字段速度很快,查询单个字段反而很慢很慢!
ORA-01436: 用户数据中的 CONNECT BY 循环
实操例子:单列查询慢
下面例子是查根据主表,带出子表idnrk一个栏位很慢,用*号就很快。原因是字表是多栏位 复合索引,要带就要带出所有索引栏位。
查看子表定义确认聚合栏位:DESC bom_detail
确认索引栏位:MANDT, MATNR, WERKS, STLAN, STLNR, STLAL, AENNR, POSNR, POSTP, IDNRK
1 2 3 4 5 6 |
select head.matnr,detail.MANDT, detail.MATNR, detail.WERKS, detail.STLAN, detail.STLNR, detail.STLAL, detail.AENNR, detail.POSNR, detail.POSTP, detail.IDNRK--很快 --head.matnr,,detail.idnrk--很慢 from edsap.bom_header head join edsap.bom_detail detail on head.matnr = detail.matnr where head.matnr='L99WC061-CS-H' |
实操例子:递归查询ORA-01436: 用户数据中的 CONNECT BY 循环
死循环添加nocycle
去除死循环记录。
1 2 3 4 5 6 7 |
select MANDT, MATNR, WERKS, STLAN, STLNR, STLAL, AENNR, POSNR, POSTP, IDNRK from edsap.bom_detail start with matnr in ('L99WC061-CS-H') connect by nocycle --主键值matnr与子建值idnrk相同时会导致死循环,须加nocycle参数 prior idnrk = matnr --上笔的子键值作为下一笔的主键值 order by matnr ,idnrk; |