SQL语句关联如何优化(几十万条数据查询速度太慢)
SELECT DOC_NO , ADDR,NAME,TYPE_CODE,ORG_NO,USED_AREA,RIGHT_NAME,BUILD_AREA_BG,BUILD_AREA_YY,BUILD_AREA_KF,BUILD_AREA_HQ,BUILD_AREA_CZ,BUILD_AREA_XZ,BUILD_AREA_DWCZ,BUILD_DATE,USED_DATE,USED_TYPE,PURPOSE,STRUCT,RIGHT,USED_STATUS,PRO_NO,GROUD_NO,HOUSE_NO,ACCECT_NO,EDIT_STAFF,EDIT_DATE,(SELECT ORG_NA...全部
SELECT DOC_NO , ADDR,NAME,TYPE_CODE,ORG_NO,USED_AREA,RIGHT_NAME,BUILD_AREA_BG,BUILD_AREA_YY,BUILD_AREA_KF,BUILD_AREA_HQ,BUILD_AREA_CZ,BUILD_AREA_XZ,BUILD_AREA_DWCZ,BUILD_DATE,USED_DATE,USED_TYPE,PURPOSE,STRUCT,RIGHT,USED_STATUS,PRO_NO,GROUD_NO,HOUSE_NO,ACCECT_NO,EDIT_STAFF,EDIT_DATE,(SELECT ORG_NAME FROM NDADM。
P_ORG P WHERE P。ORG_NO=B。ORG_NO) ORG_NAME , (SELECT NAME FROM NDADM。P_STAFF P WHERE char(P。EMP_NO)=B。
EDIT_STAFF) EDIT_STAFF_NAME , (CASE P。VALUE=B。USED_STATUS AND P。CODE_SORT_ID=300009 WHENT P。NAME THEN NULL END)USED_STATUS_NAME,(CASE P。
VALUE=B。RIGHT AND P。CODE_SORT_ID=100003 WHENT P。NAME THEN NULL END)USED_STATUS_NAME,(CASE P。VALUE=B。
TYPE_CODE AND P。CODE_SORT_ID=300006 WHENT P。NAME THEN NULL END)USED_STATUS_NAME,(CASE P。VALUE=B。
USED_TYPE AND P。CODE_SORT_ID=300008 WHENT P。NAME THEN NULL END)USED_STATUS_NAME,(CASE P。VALUE=B。
STRUCT AND P。CODE_SORT_ID=300007 WHENT P。NAME THEN NULL END)USED_STATUS_NAME, FROM NDADM。B_FW_BASE B,NDADM。
P_STAFF P WHERE P。VALUE in ( SELECT B。USED_STATUS,B。RIGHT,B。TYPE_CODE,B。USED_TYPE,B。STRUCT FROM NDADM。
B_FW_BASE B GROUP BYB。USED_STATUS,B。RIGHT,B。TYPE_CODE,B。USED_TYPE,B。STRUCT)) AND P。CODE_SORT_ID IN (300009,100003,300006,300008,300007) order by DOC_NO ----------------------- 不知道行不行,先通过where 的in筛选结果,然后再从结果去辨别当前 P。
VALUE , P。CODE_SORT_ID 条件符合的就记录name,不需要没出现一行结果就查4次, 这样如果有1000行结果就会多查4000次。但是我的sql也有缺陷,就是 第一个in条件可能会因为范围大而影响速度,但是看in里面的字段好像都是状态,类型什么, 所以先group by 一下希望可以减少in判断的条件行。
再把where语句换成: WHERE P。VALUE in ( B。USED_STATUS,B。RIGHT,B。TYPE_CODE,B。USED_TYPE,B。STRUCT ) AND P。
CODE_SORT_ID IN (300009,100003,300006,300008,300007) order by DOC_NO 试试,看看我的这两个那个快 不知道行不行,我也正好试试,如果你拿去测试了,出来结果和原来快慢请告诉我,大家一起学习,谢谢了。
收起