0

我想提高查询的性能。由于使用了 listagg 和 regxp_like,查询性能可能会下降。有没有其他更好的选择来代替这两个功能,这可能会提高性能。

  1. 我不允许向我正在使用的表引入任何索引。(为所有表添加了更多索引......不能再添加了)
  2. 需要围绕查询方法进行调整以提高其性能

查询:版本 2(性能 64.796)

    WITH SUAS_INFO AS
--Get SUAS service details
(SELECT S.NAME SUAS_SERVICE,
       S.SERVICEID SUAS_SERVICE_ID,
       SUB.NAME SUBSCRIBER_NAME,
       SMAUC.SERVICEID SMAUC_SERVICE_ID,
       SMAUC.NAME SMAUC_SERVICE,
       regexp_replace(LISTAGG(SIPVPN_MAIN.NAME, ',') WITHIN
                      GROUP(ORDER BY SIPVPN_MAIN.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SIPVPN_MAIN_SERVICE,
       regexp_replace(LISTAGG(SIPVPN_RED.NAME, ',') WITHIN
                      GROUP(ORDER BY SIPVPN_RED.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SIPVPN_RED_SERVICE,
       regexp_replace(LISTAGG(SIPSBV.NAME, ',') WITHIN
                      GROUP(ORDER BY SIPSBV.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SIPSBV_MAIN,
       regexp_replace(LISTAGG(SIPSBV_RED.NAME, ',') WITHIN
                      GROUP(ORDER BY SIPSBV_RED.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SIPSBV_RED,
       regexp_replace(LISTAGG(PORT_NO.NAME, ',') WITHIN
                      GROUP(ORDER BY PORT_NO.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SBC_PORT_NO
  FROM SERVICE S
  JOIN SUBSCRIBER SUB ON SUB.SUBSCRIBERID = S.SERVICE2SUBSCRIBER
                     AND S.SERVICE2SERVICETYPE = 1955100016
--Fetching SMAUC service
  LEFT OUTER JOIN SERVICEOBJECT SO1 ON SO1.SERVICEOBJECT2SERVICE = S.SERVICEID
                                   AND SO1.SERVICEOBJECT2RELATION = 1955100029
  LEFT OUTER JOIN SERVICE SMAUC ON SMAUC.SERVICEID = SO1.SERVICEOBJECT2OBJECT

--Fetching SIPVPN MAIN service
  LEFT OUTER JOIN SERVICEOBJECT SO2 ON SO2.SERVICEOBJECT2SERVICE = S.SERVICEID
                                   AND SO2.SERVICEOBJECT2RELATION = 1955100023
  LEFT OUTER JOIN SERVICE SIPVPN_MAIN ON SIPVPN_MAIN.SERVICEID = SO2.SERVICEOBJECT2OBJECT

--Fetching SIPVPN Redundant service
  LEFT OUTER JOIN SERVICEOBJECT SO3 ON SO3.SERVICEOBJECT2SERVICE = S.SERVICEID
                                   AND SO3.SERVICEOBJECT2RELATION = 1955100042
  LEFT OUTER JOIN SERVICE SIPVPN_RED ON SIPVPN_RED.SERVICEID = SO3.SERVICEOBJECT2OBJECT

--Fetching SBV SIP Trunk IMS service
  LEFT OUTER JOIN SERVICEOBJECT SO4 ON SO4.SERVICEOBJECT2SERVICE = S.SERVICEID
                                   AND SO4.SERVICEOBJECT2RELATION = 1955100030
  LEFT OUTER JOIN SERVICE SIPSBV ON SIPSBV.SERVICEID = SO4.SERVICEOBJECT2OBJECT

--Fetching Redundant SBV SIP Trunk IMS service
  LEFT OUTER JOIN SERVICEOBJECT SO5 ON SO5.SERVICEOBJECT2SERVICE = S.SERVICEID
                                   AND SO5.SERVICEOBJECT2RELATION = 1955100031
  LEFT OUTER JOIN SERVICE SIPSBV_RED ON SIPSBV_RED.SERVICEID = SO5.SERVICEOBJECT2OBJECT
-- Fetching SBC Port details
  LEFT OUTER JOIN SERVICEOBJECT SO6 ON SO6.SERVICEOBJECT2SERVICE = SIPSBV.SERVICEID
                                   AND SO6.SERVICEOBJECT2RELATION = 3100000065
                                   AND SO6.SERVICEOBJECT2DIMOBJECT = 3

  LEFT OUTER JOIN CIRCUIT CKT ON CKT.CIRCUITID = SO6.SERVICEOBJECT2OBJECT

  LEFT OUTER JOIN NODE PBX ON PBX.NODE2NODEDEF = 3100000000
                          AND PBX.NODEID IN
                              (CKT.CIRCUIT2STARTNODE, CKT.CIRCUIT2ENDNODE)
  LEFT OUTER JOIN PORT P ON P.PORTID =
                            DECODE(PBX.NODEID,
                                   CKT.CIRCUIT2STARTNODE,
                                   CKT.CIRCUIT2STARTPORT,
                                   CKT.CIRCUIT2ENDPORT)
  LEFT OUTER JOIN NUMBEROBJECT NOB ON NOB.NUMBEROBJECT2OBJECT = P.PORTID
                                  AND NOB.NUMBEROBJECT2RELATION = 3100000031
  LEFT OUTER JOIN DIMNUMBER PORT_NO ON PORT_NO.DIMNUMBERID = NOB.NUMBEROBJECT2NUMBER

 GROUP BY S.NAME, S.SERVICEID, SUB.NAME, SMAUC.SERVICEID, SMAUC.NAME

),

SMAUC_REL AS
(SELECT SMAUC1.SERVICEID SMAUC_SERVICEID,
       regexp_replace(LISTAGG(SID_MAIN.NAME, ',') WITHIN
                      GROUP(ORDER BY SID_MAIN.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SID_MAIN_NAME,
       regexp_replace(LISTAGG(SID_RED.NAME, ',') WITHIN
                      GROUP(ORDER BY SID_RED.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3') SID_RED_NAME,
       SEC_SUBNET.NAME SEC_SUBNET,
       GLBL_DMZ_SUBNET.NAME GLBL_DMZ_SUBNET,
       GLBL_DMZ_IP.NAME GLBL_DMZ_ZONE_IP,
       CUST_DMZ_SUBNET.NAME CUST_DMZ_SUBNET,
       CUST_PUB_IP.NAME CUST_PUB_IP_EDGE,
       CUST_PUB_SBC.NAME CUST_PUB_SBC_B2B_IP,
       PUB_REV_PRX.NAME PUBLIC_REVRS_PRXY_MOB_IP,
       CUST_ACC_SUB.NAME CUST_ACC_SUBNET,
       EXT_SMAUC.REVERSEPROXYURL CUST_REVERSEPROXYURL,
       CUST_ACS_VLAN.VALUETO CUST_ACCZONE_VLAN,
       SEC_ZONE_VLAN.VALUETO SEC_ZONE_VLAN,
       GLBL_DMZ_VLAN.VALUETO GLBL_DMZ_VLAN,
       CUST_DMZ_VLAN.VALUETO CUST_DMZ_VLAN,
       MAIN_SBC.NAME MAIN_SBC_DEVICE
  FROM SERVICE SMAUC1
--Fetching SID Main service
  LEFT OUTER JOIN SERVICEOBJECT SO6 ON SO6.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                   AND SO6.SERVICEOBJECT2RELATION = 1955100039
  LEFT OUTER JOIN SERVICE SID_MAIN ON SID_MAIN.SERVICEID = SO6.SERVICEOBJECT2OBJECT

--Fetching SID Redundant service
  LEFT OUTER JOIN SERVICEOBJECT SO7 ON SO7.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                   AND SO7.SERVICEOBJECT2RELATION = 1955100038
  LEFT OUTER JOIN SERVICE SID_RED ON SID_RED.SERVICEID = SO7.SERVICEOBJECT2OBJECT

--Fetching Secure Zone Subnet Number
  LEFT OUTER JOIN SERVICEOBJECT SO8 ON SO8.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                   AND SO8.SERVICEOBJECT2RELATION = 1955100041
  LEFT OUTER JOIN DIMNUMBER SEC_SUBNET ON SEC_SUBNET.DIMNUMBERID = SO8.SERVICEOBJECT2OBJECT

--Fetching Global DMZ Zone Subnet Number
  LEFT OUTER JOIN SERVICEOBJECT SO9 ON SO9.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                   AND SO9.SERVICEOBJECT2RELATION = 1955100036
  LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_SUBNET ON GLBL_DMZ_SUBNET.DIMNUMBERID = SO9.SERVICEOBJECT2OBJECT

--Fetching Customer DMZ Subnet Number
  LEFT OUTER JOIN SERVICEOBJECT SO10 ON SO10.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO10.SERVICEOBJECT2RELATION = 1955100028
  LEFT OUTER JOIN DIMNUMBER CUST_DMZ_SUBNET ON CUST_DMZ_SUBNET.DIMNUMBERID = SO10.SERVICEOBJECT2OBJECT

--Fetching Global DMZ Zone IP Number
  LEFT OUTER JOIN SERVICEOBJECT SO_11 ON SO_11.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                     AND SO_11.SERVICEOBJECT2RELATION = 1955100043
  LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_IP ON GLBL_DMZ_IP.DIMNUMBERID = SO_11.SERVICEOBJECT2OBJECT

--Fetching Customer Public Edge IP Number
  LEFT OUTER JOIN SERVICEOBJECT SO11 ON SO11.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO11.SERVICEOBJECT2RELATION = 1955100024
  LEFT OUTER JOIN DIMNUMBER CUST_PUB_IP ON CUST_PUB_IP.DIMNUMBERID = SO11.SERVICEOBJECT2OBJECT

--Fetching Customer Public SBC B2B IP Number
  LEFT OUTER JOIN SERVICEOBJECT SO12 ON SO12.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO12.SERVICEOBJECT2RELATION = 1955100026
  LEFT OUTER JOIN DIMNUMBER CUST_PUB_SBC ON CUST_PUB_SBC.DIMNUMBERID = SO12.SERVICEOBJECT2OBJECT

--Fetching Public Reverse Proxy Mobile Access IP Number
  LEFT OUTER JOIN SERVICEOBJECT SO13 ON SO13.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO13.SERVICEOBJECT2RELATION = 1955100033
  LEFT OUTER JOIN DIMNUMBER PUB_REV_PRX ON PUB_REV_PRX.DIMNUMBERID = SO13.SERVICEOBJECT2OBJECT

--Fetching Customer Access Subnet Number
  LEFT OUTER JOIN SERVICEOBJECT SO14 ON SO14.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO14.SERVICEOBJECT2RELATION = 1955100035
  LEFT OUTER JOIN DIMNUMBER CUST_ACC_SUB ON CUST_ACC_SUB.DIMNUMBERID = SO14.SERVICEOBJECT2OBJECT

--Fetching Customer Access Zone VLAN
  LEFT OUTER JOIN SERVICEOBJECT SO15 ON SO15.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO15.SERVICEOBJECT2RELATION = 1955100034
  LEFT OUTER JOIN DIMNUMBER CUST_ACS_VLAN ON CUST_ACS_VLAN.DIMNUMBERID = SO15.SERVICEOBJECT2OBJECT

--Fetching Customer Secured Zone VLAN
  LEFT OUTER JOIN SERVICEOBJECT SO16 ON SO16.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO16.SERVICEOBJECT2RELATION = 1955100040
  LEFT OUTER JOIN DIMNUMBER SEC_ZONE_VLAN ON SEC_ZONE_VLAN.DIMNUMBERID = SO16.SERVICEOBJECT2OBJECT

--Fetching Global DMZ VLAN
  LEFT OUTER JOIN SERVICEOBJECT SO17 ON SO17.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO17.SERVICEOBJECT2RELATION = 1955100032
  LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_VLAN ON GLBL_DMZ_VLAN.DIMNUMBERID = SO17.SERVICEOBJECT2OBJECT

--Fetching Customer DMZ VLAN
  LEFT OUTER JOIN SERVICEOBJECT SO18 ON SO18.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO18.SERVICEOBJECT2RELATION = 1955100027
  LEFT OUTER JOIN DIMNUMBER CUST_DMZ_VLAN ON CUST_DMZ_VLAN.DIMNUMBERID = SO18.SERVICEOBJECT2OBJECT

--Fetching Main SBC Node
  LEFT OUTER JOIN SERVICEOBJECT SO19 ON SO19.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                                    AND SO19.SERVICEOBJECT2RELATION = 1955100044
  LEFT OUTER JOIN NODE MAIN_SBC ON MAIN_SBC.NODEID = SO19.SERVICEOBJECT2OBJECT

--Fetching REVERSEPROXYURL for SMAUC port
  LEFT OUTER JOIN SERVICE_EXT_SMAUC EXT_SMAUC ON EXT_SMAUC.SERVICEID = SMAUC1.SERVICEID
 GROUP BY SMAUC1.SERVICEID,
          SEC_SUBNET.NAME,
          GLBL_DMZ_SUBNET.NAME,
          GLBL_DMZ_IP.NAME,
          CUST_DMZ_SUBNET.NAME,
          CUST_PUB_IP.NAME,
          CUST_PUB_SBC.NAME,
          PUB_REV_PRX.NAME,
          CUST_ACC_SUB.NAME,
          EXT_SMAUC.REVERSEPROXYURL,
          CUST_ACS_VLAN.VALUETO,
          SEC_ZONE_VLAN.VALUETO,
          GLBL_DMZ_VLAN.VALUETO,
          CUST_DMZ_VLAN.VALUETO,
          MAIN_SBC.NAME             
)
SELECT SUAS_INFO.SUAS_SERVICE,
       SUAS_INFO.SUBSCRIBER_NAME,
       SUAS_INFO.SMAUC_SERVICE,
       SUAS_INFO.SIPVPN_MAIN_SERVICE,
       SUAS_INFO.SIPVPN_RED_SERVICE,
       SMAUC_REL.SID_MAIN_NAME,
       SMAUC_REL.SID_RED_NAME,
       SUAS_INFO.SIPSBV_MAIN,
       SUAS_INFO.SIPSBV_RED,
       SMAUC_REL.CUST_ACCZONE_VLAN,
       SMAUC_REL.CUST_ACC_SUBNET,
       SMAUC_REL.SEC_ZONE_VLAN,
       SMAUC_REL.SEC_SUBNET,
       SMAUC_REL.GLBL_DMZ_VLAN,
       SMAUC_REL.GLBL_DMZ_SUBNET,
       SMAUC_REL.GLBL_DMZ_ZONE_IP GLBL_DMZ_ZONE_IP,
       SMAUC_REL.CUST_DMZ_VLAN,
       SMAUC_REL.CUST_DMZ_SUBNET,
       SMAUC_REL.CUST_PUB_IP_EDGE,
       SMAUC_REL.CUST_PUB_SBC_B2B_IP,
       SMAUC_REL.PUBLIC_REVRS_PRXY_MOB_IP,
       SMAUC_REL.CUST_REVERSEPROXYURL,
       SUAS_INFO.SBC_PORT_NO,
       SMAUC_REL.MAIN_SBC_DEVICE
  FROM SUAS_INFO
  LEFT OUTER JOIN SMAUC_REL ON SMAUC_REL.SMAUC_SERVICEID = SUAS_INFO.SMAUC_SERVICE_ID
 ORDER BY SUAS_INFO.SUAS_SERVICE

查询:版本 1(性能 10.327)

WITH SUAS_INFO AS
--Get SUAS service details
(SELECT S.NAME SUAS_SERVICE,S.SERVICEID SUAS_SERVICE_ID,SUB.NAME SUBSCRIBER_NAME,SMAUC.SERVICEID SMAUC_SERVICE_ID,SMAUC.NAME SMAUC_SERVICE,SIPVPN_MAIN.NAME SIPVPN_MAIN_SERVICE,SIPVPN_RED.NAME SIPVPN_RED_SERVICE,SIPSBV.NAME SIPSBV_MAIN,SIPSBV_RED.NAME SIPSBV_RED
FROM SERVICE S 
JOIN SUBSCRIBER SUB
ON SUB.SUBSCRIBERID=S.SERVICE2SUBSCRIBER
AND S.SERVICE2SERVICETYPE=1955100016
--Fetching SMAUC service
LEFT OUTER JOIN SERVICEOBJECT SO1 ON SO1.SERVICEOBJECT2SERVICE=S.SERVICEID
AND SO1.SERVICEOBJECT2RELATION=1955100029
LEFT OUTER JOIN SERVICE SMAUC ON SMAUC.SERVICEID=SO1.SERVICEOBJECT2OBJECT

--Fetching SIPVPN MAIN service
LEFT OUTER JOIN SERVICEOBJECT SO2 ON SO2.SERVICEOBJECT2SERVICE=S.SERVICEID
AND SO2.SERVICEOBJECT2RELATION=1955100023
LEFT OUTER JOIN SERVICE SIPVPN_MAIN ON SIPVPN_MAIN.SERVICEID=SO2.SERVICEOBJECT2OBJECT


--Fetching SIPVPN Redundant service
LEFT OUTER JOIN SERVICEOBJECT SO3 ON SO3.SERVICEOBJECT2SERVICE=S.SERVICEID
AND SO3.SERVICEOBJECT2RELATION=1955100042
LEFT OUTER JOIN SERVICE SIPVPN_RED ON SIPVPN_RED.SERVICEID=SO3.SERVICEOBJECT2OBJECT


--Fetching SBV SIP Trunk IMS service
LEFT OUTER JOIN SERVICEOBJECT SO4 ON SO4.SERVICEOBJECT2SERVICE=S.SERVICEID
AND SO4.SERVICEOBJECT2RELATION=1955100030
LEFT OUTER JOIN SERVICE SIPSBV ON SIPSBV.SERVICEID=SO4.SERVICEOBJECT2OBJECT



--Fetching Redundant SBV SIP Trunk IMS service
LEFT OUTER JOIN SERVICEOBJECT SO5 ON SO5.SERVICEOBJECT2SERVICE=S.SERVICEID
AND SO5.SERVICEOBJECT2RELATION=1955100031
LEFT OUTER JOIN SERVICE SIPSBV_RED ON SIPSBV_RED.SERVICEID=SO5.SERVICEOBJECT2OBJECT


),

SMAUC_REL AS
(SELECT SMAUC1.SERVICEID SMAUC_SERVICEID,SID_MAIN.NAME SID_MAIN_NAME,SID_RED.NAME SID_RED_NAME,SEC_SUBNET.NAME SEC_SUBNET,GLBL_DMZ_SUBNET.NAME GLBL_DMZ_SUBNET,GLBL_DMZ_IP.NAME GLBL_DMZ_ZONE_IP,
CUST_DMZ_SUBNET.NAME CUST_DMZ_SUBNET,CUST_PUB_IP.NAME CUST_PUB_IP_EDGE,CUST_PUB_SBC.NAME CUST_PUB_SBC_B2B_IP,PUB_REV_PRX.NAME PUBLIC_REVRS_PRXY_MOB_IP,CUST_ACC_SUB.NAME CUST_ACC_SUBNET,EXT_SMAUC.REVERSEPROXYURL CUST_REVERSEPROXYURL,
CUST_ACS_VLAN.VALUETO CUST_ACCZONE_VLAN,SEC_ZONE_VLAN.VALUETO SEC_ZONE_VLAN,GLBL_DMZ_VLAN.VALUETO GLBL_DMZ_VLAN,CUST_DMZ_VLAN.VALUETO CUST_DMZ_VLAN
FROM SERVICE SMAUC1
--Fetching SID Main service
LEFT OUTER JOIN SERVICEOBJECT SO6 ON SO6.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO6.SERVICEOBJECT2RELATION=1955100039
LEFT OUTER JOIN SERVICE SID_MAIN ON SID_MAIN.SERVICEID=SO6.SERVICEOBJECT2OBJECT


--Fetching SID Redundant service
LEFT OUTER JOIN SERVICEOBJECT SO7 ON SO7.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO7.SERVICEOBJECT2RELATION=1955100038
LEFT OUTER JOIN SERVICE SID_RED ON SID_RED.SERVICEID=SO7.SERVICEOBJECT2OBJECT


--Fetching Secure Zone Subnet Number
LEFT OUTER JOIN SERVICEOBJECT SO8 ON SO8.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO8.SERVICEOBJECT2RELATION=1955100041
LEFT OUTER JOIN DIMNUMBER SEC_SUBNET ON SEC_SUBNET.DIMNUMBERID=SO8.SERVICEOBJECT2OBJECT


--Fetching Global DMZ Zone Subnet Number
LEFT OUTER JOIN SERVICEOBJECT SO9 ON SO9.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO9.SERVICEOBJECT2RELATION=1955100036
LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_SUBNET ON GLBL_DMZ_SUBNET.DIMNUMBERID=SO9.SERVICEOBJECT2OBJECT


--Fetching Customer DMZ Subnet Number
LEFT OUTER JOIN SERVICEOBJECT SO10 ON SO10.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO10.SERVICEOBJECT2RELATION=1955100028
LEFT OUTER JOIN DIMNUMBER CUST_DMZ_SUBNET ON CUST_DMZ_SUBNET.DIMNUMBERID=SO10.SERVICEOBJECT2OBJECT

--Fetching Global DMZ Zone IP Number
LEFT OUTER JOIN SERVICEOBJECT SO_11 ON SO_11.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO_11.SERVICEOBJECT2RELATION=1955100043
LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_IP ON GLBL_DMZ_IP.DIMNUMBERID=SO_11.SERVICEOBJECT2OBJECT

--Fetching Customer Public Edge IP Number
LEFT OUTER JOIN SERVICEOBJECT SO11 ON SO11.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO11.SERVICEOBJECT2RELATION=1955100024
LEFT OUTER JOIN DIMNUMBER CUST_PUB_IP ON CUST_PUB_IP.DIMNUMBERID=SO11.SERVICEOBJECT2OBJECT

--Fetching Customer Public SBC B2B IP Number
LEFT OUTER JOIN SERVICEOBJECT SO12 ON SO12.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO12.SERVICEOBJECT2RELATION=1955100026
LEFT OUTER JOIN DIMNUMBER CUST_PUB_SBC ON CUST_PUB_SBC.DIMNUMBERID=SO12.SERVICEOBJECT2OBJECT

--Fetching Public Reverse Proxy Mobile Access IP Number
LEFT OUTER JOIN SERVICEOBJECT SO13 ON SO13.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO13.SERVICEOBJECT2RELATION=1955100033
LEFT OUTER JOIN DIMNUMBER PUB_REV_PRX ON PUB_REV_PRX.DIMNUMBERID=SO13.SERVICEOBJECT2OBJECT

--Fetching Customer Access Subnet Number
LEFT OUTER JOIN SERVICEOBJECT SO14 ON SO14.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO14.SERVICEOBJECT2RELATION=1955100035
LEFT OUTER JOIN DIMNUMBER CUST_ACC_SUB ON CUST_ACC_SUB.DIMNUMBERID=SO14.SERVICEOBJECT2OBJECT

--Fetching Customer Access Zone VLAN
LEFT OUTER JOIN SERVICEOBJECT SO15 ON SO15.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO15.SERVICEOBJECT2RELATION=1955100034
LEFT OUTER JOIN DIMNUMBER CUST_ACS_VLAN ON CUST_ACS_VLAN.DIMNUMBERID=SO15.SERVICEOBJECT2OBJECT

--Fetching Customer Secured Zone VLAN
LEFT OUTER JOIN SERVICEOBJECT SO16 ON SO16.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO16.SERVICEOBJECT2RELATION=1955100040
LEFT OUTER JOIN DIMNUMBER SEC_ZONE_VLAN ON SEC_ZONE_VLAN.DIMNUMBERID=SO16.SERVICEOBJECT2OBJECT

--Fetching Global DMZ VLAN
LEFT OUTER JOIN SERVICEOBJECT SO17 ON SO17.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO17.SERVICEOBJECT2RELATION=1955100032
LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_VLAN ON GLBL_DMZ_VLAN.DIMNUMBERID=SO17.SERVICEOBJECT2OBJECT

--Fetching Customer DMZ VLAN
LEFT OUTER JOIN SERVICEOBJECT SO17 ON SO17.SERVICEOBJECT2SERVICE=SMAUC1.SERVICEID
AND SO17.SERVICEOBJECT2RELATION=1955100027
LEFT OUTER JOIN DIMNUMBER CUST_DMZ_VLAN ON CUST_DMZ_VLAN.DIMNUMBERID=SO17.SERVICEOBJECT2OBJECT


--Fetching REVERSEPROXYURL for SMAUC port
LEFT OUTER JOIN SERVICE_EXT_SMAUC EXT_SMAUC ON EXT_SMAUC.SERVICEID=SMAUC1.SERVICEID
)
,
SBC_PORT AS(SELECT MAIN_TRUNK.NAME SBV_SERVICE,PORT_NO.NAME SBC_PORT_NO
FROM SERVICE MAIN_TRUNK LEFT OUTER JOIN SERVICEOBJECT SO
ON SO.SERVICEOBJECT2SERVICE=MAIN_TRUNK.SERVICEID
AND SO.SERVICEOBJECT2RELATION=3100000065
AND SO.SERVICEOBJECT2DIMOBJECT=3
JOIN CIRCUIT CKT ON CKT.CIRCUITID=SO.SERVICEOBJECT2OBJECT
LEFT OUTER JOIN NODE PBX ON PBX.NODE2NODEDEF=3100000000
AND PBX.NODEID IN (CKT.CIRCUIT2STARTNODE,CKT.CIRCUIT2ENDNODE)
LEFT OUTER JOIN PORT P ON P.PORTID=DECODE(PBX.NODEID,CKT.CIRCUIT2STARTNODE,CKT.CIRCUIT2STARTPORT,CKT.CIRCUIT2ENDPORT)
LEFT OUTER JOIN NUMBEROBJECT NOB ON NOB.NUMBEROBJECT2OBJECT=P.PORTID
AND NOB.NUMBEROBJECT2RELATION=3100000031
LEFT OUTER JOIN DIMNUMBER PORT_NO ON PORT_NO.DIMNUMBERID=NOB.NUMBEROBJECT2NUMBER)



SELECT SUAS_INFO.SUAS_SERVICE,SUAS_INFO.SUBSCRIBER_NAME,SUAS_INFO.SMAUC_SERVICE,SUAS_INFO.SIPVPN_MAIN_SERVICE,
SUAS_INFO.SIPVPN_RED_SERVICE,SUAS_INFO.SIPSBV_MAIN,SUAS_INFO.SIPSBV_RED,SMAUC_REL.SID_MAIN_NAME,SMAUC_REL.SID_RED_NAME,SMAUC_REL.CUST_ACC_SUBNET,
SMAUC_REL.SEC_SUBNET,SMAUC_REL.GLBL_DMZ_SUBNET,SMAUC_REL.GLBL_DMZ_ZONE_IP GLBL_DMZ_ZONE_IP,SMAUC_REL.CUST_DMZ_SUBNET,SMAUC_REL.CUST_PUB_IP_EDGE,SMAUC_REL.CUST_PUB_SBC_B2B_IP,
SMAUC_REL.PUBLIC_REVRS_PRXY_MOB_IP,SMAUC_REL.CUST_ACCZONE_VLAN,SMAUC_REL.SEC_ZONE_VLAN,SMAUC_REL.GLBL_DMZ_VLAN,SMAUC_REL.CUST_DMZ_VLAN,SMAUC_REL.CUST_REVERSEPROXYURL,
SBC.SBC_PORT_NO SBC_PORT_NUM

FROM SUAS_INFO 
               LEFT OUTER JOIN SMAUC_REL ON SMAUC_REL.SMAUC_SERVICEID=SUAS_INFO.SMAUC_SERVICE_ID
               LEFT OUTER JOIN SBC_PORT SBC  ON SBC.SBV_SERVICE=SUAS_INFO.SIPSBV_MAIN
               ORDER BY SUAS_INFO.SUAS_SERVICE;

​</p>

4

3 回答 3

0

通过@Used-By-Already 给出的小提示,我可以对查询进行一些调整,它确实解决了我的问题。在我的查询中没有注意到一个重要的过滤器。

/* Formatted on 11.20.2018 5:10:07  (QP5 v5.300) */
WITH SUAS_INFO
     AS --Get SUAS service details
        (  SELECT S.NAME        SUAS_SERVICE,
                  S.SERVICEID   SUAS_SERVICE_ID,
                  SUB.NAME      SUBSCRIBER_NAME,
                  SMAUC.SERVICEID SMAUC_SERVICE_ID,
                  SMAUC.NAME    SMAUC_SERVICE,
                  REGEXP_REPLACE (
                      LISTAGG (SIPVPN_MAIN.NAME, ',')
                          WITHIN GROUP (ORDER BY SIPVPN_MAIN.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SIPVPN_MAIN_SERVICE,
                  REGEXP_REPLACE (
                      LISTAGG (SIPVPN_RED.NAME, ',')
                          WITHIN GROUP (ORDER BY SIPVPN_RED.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SIPVPN_RED_SERVICE,
                  REGEXP_REPLACE (
                      LISTAGG (SIPSBV.NAME, ',')
                          WITHIN GROUP (ORDER BY SIPSBV.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SIPSBV_MAIN,
                  REGEXP_REPLACE (
                      LISTAGG (SIPSBV_RED.NAME, ',')
                          WITHIN GROUP (ORDER BY SIPSBV_RED.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SIPSBV_RED,
                  REGEXP_REPLACE (
                      LISTAGG (PORT_NO.NAME, ',')
                          WITHIN GROUP (ORDER BY PORT_NO.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SBC_PORT_NO
             FROM SERVICE S
                  JOIN SUBSCRIBER SUB
                      ON SUB.SUBSCRIBERID = S.SERVICE2SUBSCRIBER
                  --Fetching SMAUC service
                  LEFT OUTER JOIN SERVICEOBJECT SO1
                      ON     SO1.SERVICEOBJECT2SERVICE = S.SERVICEID
                         AND SO1.SERVICEOBJECT2RELATION = 1955100029
                  LEFT OUTER JOIN SERVICE SMAUC
                      ON SMAUC.SERVICEID = SO1.SERVICEOBJECT2OBJECT
                  --Fetching SIPVPN MAIN service
                  LEFT OUTER JOIN SERVICEOBJECT SO2
                      ON     SO2.SERVICEOBJECT2SERVICE = S.SERVICEID
                         AND SO2.SERVICEOBJECT2RELATION = 1955100023
                  LEFT OUTER JOIN SERVICE SIPVPN_MAIN
                      ON SIPVPN_MAIN.SERVICEID = SO2.SERVICEOBJECT2OBJECT
                  --Fetching SIPVPN Redundant service
                  LEFT OUTER JOIN SERVICEOBJECT SO3
                      ON     SO3.SERVICEOBJECT2SERVICE = S.SERVICEID
                         AND SO3.SERVICEOBJECT2RELATION = 1955100042
                  LEFT OUTER JOIN SERVICE SIPVPN_RED
                      ON SIPVPN_RED.SERVICEID = SO3.SERVICEOBJECT2OBJECT
                  --Fetching SBV SIP Trunk IMS service
                  LEFT OUTER JOIN SERVICEOBJECT SO4
                      ON     SO4.SERVICEOBJECT2SERVICE = S.SERVICEID
                         AND SO4.SERVICEOBJECT2RELATION = 1955100030
                  LEFT OUTER JOIN SERVICE SIPSBV
                      ON SIPSBV.SERVICEID = SO4.SERVICEOBJECT2OBJECT
                  --Fetching Redundant SBV SIP Trunk IMS service
                  LEFT OUTER JOIN SERVICEOBJECT SO5
                      ON     SO5.SERVICEOBJECT2SERVICE = S.SERVICEID
                         AND SO5.SERVICEOBJECT2RELATION = 1955100031
                  LEFT OUTER JOIN SERVICE SIPSBV_RED
                      ON SIPSBV_RED.SERVICEID = SO5.SERVICEOBJECT2OBJECT
                  -- Fetching SBC Port details
                  LEFT OUTER JOIN SERVICEOBJECT SO6
                      ON     SO6.SERVICEOBJECT2SERVICE = SIPSBV.SERVICEID
                         AND SO6.SERVICEOBJECT2RELATION = 3100000065
                         AND SO6.SERVICEOBJECT2DIMOBJECT = 3
                  LEFT OUTER JOIN CIRCUIT CKT
                      ON CKT.CIRCUITID = SO6.SERVICEOBJECT2OBJECT
                  LEFT OUTER JOIN NODE PBX
                      ON     PBX.NODE2NODEDEF = 3100000000
                         AND PBX.NODEID IN
                                 (CKT.CIRCUIT2STARTNODE, CKT.CIRCUIT2ENDNODE)
                  LEFT OUTER JOIN PORT P
                      ON P.PORTID =
                             DECODE (
                                 PBX.NODEID,
                                 CKT.CIRCUIT2STARTNODE, CKT.CIRCUIT2STARTPORT,
                                 CKT.CIRCUIT2ENDPORT)
                  LEFT OUTER JOIN NUMBEROBJECT NOB
                      ON     NOB.NUMBEROBJECT2OBJECT = P.PORTID
                         AND NOB.NUMBEROBJECT2RELATION = 3100000031
                  LEFT OUTER JOIN DIMNUMBER PORT_NO
                      ON PORT_NO.DIMNUMBERID = NOB.NUMBEROBJECT2NUMBER
            WHERE S.SERVICE2SERVICETYPE = 1955100016
         GROUP BY S.NAME,
                  S.SERVICEID,
                  SUB.NAME,
                  SMAUC.SERVICEID,
                  SMAUC.NAME),
     SMAUC_REL
     AS (  SELECT SMAUC1.SERVICEID        SMAUC_SERVICEID,
                  REGEXP_REPLACE (
                      LISTAGG (SID_MAIN.NAME, ',')
                          WITHIN GROUP (ORDER BY SID_MAIN.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SID_MAIN_NAME,
                  REGEXP_REPLACE (
                      LISTAGG (SID_RED.NAME, ',')
                          WITHIN GROUP (ORDER BY SID_RED.NAME),
                      '([^,]+)(,\1)*(,|$)',
                      '\1\3')
                      SID_RED_NAME,
                  SEC_SUBNET.NAME         SEC_SUBNET,
                  GLBL_DMZ_SUBNET.NAME    GLBL_DMZ_SUBNET,
                  GLBL_DMZ_IP.NAME        GLBL_DMZ_ZONE_IP,
                  CUST_DMZ_SUBNET.NAME    CUST_DMZ_SUBNET,
                  CUST_PUB_IP.NAME        CUST_PUB_IP_EDGE,
                  CUST_PUB_SBC.NAME       CUST_PUB_SBC_B2B_IP,
                  PUB_REV_PRX.NAME        PUBLIC_REVRS_PRXY_MOB_IP,
                  CUST_ACC_SUB.NAME       CUST_ACC_SUBNET,
                  EXT_SMAUC.REVERSEPROXYURL CUST_REVERSEPROXYURL,
                  CUST_ACS_VLAN.VALUETO   CUST_ACCZONE_VLAN,
                  SEC_ZONE_VLAN.VALUETO   SEC_ZONE_VLAN,
                  GLBL_DMZ_VLAN.VALUETO   GLBL_DMZ_VLAN,
                  CUST_DMZ_VLAN.VALUETO   CUST_DMZ_VLAN,
                  MAIN_SBC.NAME           MAIN_SBC_DEVICE
             FROM SERVICE SMAUC1
                  --Fetching SID Main service
                  LEFT OUTER JOIN SERVICEOBJECT SO6
                      ON     SO6.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO6.SERVICEOBJECT2RELATION = 1955100039
                  LEFT OUTER JOIN SERVICE SID_MAIN
                      ON SID_MAIN.SERVICEID = SO6.SERVICEOBJECT2OBJECT
                  --Fetching SID Redundant service
                  LEFT OUTER JOIN SERVICEOBJECT SO7
                      ON     SO7.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO7.SERVICEOBJECT2RELATION = 1955100038
                  LEFT OUTER JOIN SERVICE SID_RED
                      ON SID_RED.SERVICEID = SO7.SERVICEOBJECT2OBJECT
                  --Fetching Secure Zone Subnet Number
                  LEFT OUTER JOIN SERVICEOBJECT SO8
                      ON     SO8.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO8.SERVICEOBJECT2RELATION = 1955100041
                  LEFT OUTER JOIN DIMNUMBER SEC_SUBNET
                      ON SEC_SUBNET.DIMNUMBERID = SO8.SERVICEOBJECT2OBJECT
                  --Fetching Global DMZ Zone Subnet Number
                  LEFT OUTER JOIN SERVICEOBJECT SO9
                      ON     SO9.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO9.SERVICEOBJECT2RELATION = 1955100036
                  LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_SUBNET
                      ON GLBL_DMZ_SUBNET.DIMNUMBERID = SO9.SERVICEOBJECT2OBJECT
                  --Fetching Customer DMZ Subnet Number
                  LEFT OUTER JOIN SERVICEOBJECT SO10
                      ON     SO10.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO10.SERVICEOBJECT2RELATION = 1955100028
                  LEFT OUTER JOIN DIMNUMBER CUST_DMZ_SUBNET
                      ON CUST_DMZ_SUBNET.DIMNUMBERID =
                             SO10.SERVICEOBJECT2OBJECT
                  --Fetching Global DMZ Zone IP Number
                  LEFT OUTER JOIN SERVICEOBJECT SO_11
                      ON     SO_11.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO_11.SERVICEOBJECT2RELATION = 1955100043
                  LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_IP
                      ON GLBL_DMZ_IP.DIMNUMBERID = SO_11.SERVICEOBJECT2OBJECT
                  --Fetching Customer Public Edge IP Number
                  LEFT OUTER JOIN SERVICEOBJECT SO11
                      ON     SO11.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO11.SERVICEOBJECT2RELATION = 1955100024
                  LEFT OUTER JOIN DIMNUMBER CUST_PUB_IP
                      ON CUST_PUB_IP.DIMNUMBERID = SO11.SERVICEOBJECT2OBJECT
                  --Fetching Customer Public SBC B2B IP Number
                  LEFT OUTER JOIN SERVICEOBJECT SO12
                      ON     SO12.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO12.SERVICEOBJECT2RELATION = 1955100026
                  LEFT OUTER JOIN DIMNUMBER CUST_PUB_SBC
                      ON CUST_PUB_SBC.DIMNUMBERID = SO12.SERVICEOBJECT2OBJECT
                  --Fetching Public Reverse Proxy Mobile Access IP Number
                  LEFT OUTER JOIN SERVICEOBJECT SO13
                      ON     SO13.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO13.SERVICEOBJECT2RELATION = 1955100033
                  LEFT OUTER JOIN DIMNUMBER PUB_REV_PRX
                      ON PUB_REV_PRX.DIMNUMBERID = SO13.SERVICEOBJECT2OBJECT
                  --Fetching Customer Access Subnet Number
                  LEFT OUTER JOIN SERVICEOBJECT SO14
                      ON     SO14.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO14.SERVICEOBJECT2RELATION = 1955100035
                  LEFT OUTER JOIN DIMNUMBER CUST_ACC_SUB
                      ON CUST_ACC_SUB.DIMNUMBERID = SO14.SERVICEOBJECT2OBJECT
                  --Fetching Customer Access Zone VLAN
                  LEFT OUTER JOIN SERVICEOBJECT SO15
                      ON     SO15.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO15.SERVICEOBJECT2RELATION = 1955100034
                  LEFT OUTER JOIN DIMNUMBER CUST_ACS_VLAN
                      ON CUST_ACS_VLAN.DIMNUMBERID = SO15.SERVICEOBJECT2OBJECT
                  --Fetching Customer Secured Zone VLAN
                  LEFT OUTER JOIN SERVICEOBJECT SO16
                      ON     SO16.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO16.SERVICEOBJECT2RELATION = 1955100040
                  LEFT OUTER JOIN DIMNUMBER SEC_ZONE_VLAN
                      ON SEC_ZONE_VLAN.DIMNUMBERID = SO16.SERVICEOBJECT2OBJECT
                  --Fetching Global DMZ VLAN
                  LEFT OUTER JOIN SERVICEOBJECT SO17
                      ON     SO17.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO17.SERVICEOBJECT2RELATION = 1955100032
                  LEFT OUTER JOIN DIMNUMBER GLBL_DMZ_VLAN
                      ON GLBL_DMZ_VLAN.DIMNUMBERID = SO17.SERVICEOBJECT2OBJECT
                  --Fetching Customer DMZ VLAN
                  LEFT OUTER JOIN SERVICEOBJECT SO18
                      ON     SO18.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO18.SERVICEOBJECT2RELATION = 1955100027
                  LEFT OUTER JOIN DIMNUMBER CUST_DMZ_VLAN
                      ON CUST_DMZ_VLAN.DIMNUMBERID = SO18.SERVICEOBJECT2OBJECT
                  --Fetching Main SBC Node
                  LEFT OUTER JOIN SERVICEOBJECT SO19
                      ON     SO19.SERVICEOBJECT2SERVICE = SMAUC1.SERVICEID
                         AND SO19.SERVICEOBJECT2RELATION = 1955100044
                  LEFT OUTER JOIN NODE MAIN_SBC
                      ON MAIN_SBC.NODEID = SO19.SERVICEOBJECT2OBJECT
                  --Fetching REVERSEPROXYURL for SMAUC port
                  LEFT OUTER JOIN SERVICE_EXT_SMAUC EXT_SMAUC
                      ON EXT_SMAUC.SERVICEID = SMAUC1.SERVICEID
            WHERE SMAUC1.SERVICE2SERVICETYPE = 1955100017
         GROUP BY SMAUC1.SERVICEID,
                  SEC_SUBNET.NAME,
                  GLBL_DMZ_SUBNET.NAME,
                  GLBL_DMZ_IP.NAME,
                  CUST_DMZ_SUBNET.NAME,
                  CUST_PUB_IP.NAME,
                  CUST_PUB_SBC.NAME,
                  PUB_REV_PRX.NAME,
                  CUST_ACC_SUB.NAME,
                  EXT_SMAUC.REVERSEPROXYURL,
                  CUST_ACS_VLAN.VALUETO,
                  SEC_ZONE_VLAN.VALUETO,
                  GLBL_DMZ_VLAN.VALUETO,
                  CUST_DMZ_VLAN.VALUETO,
                  MAIN_SBC.NAME)
  SELECT SUAS_INFO.SUAS_SERVICE,
         SUAS_INFO.SUBSCRIBER_NAME,
         SUAS_INFO.SMAUC_SERVICE,
         SUAS_INFO.SIPVPN_MAIN_SERVICE,
         SUAS_INFO.SIPVPN_RED_SERVICE,
         SMAUC_REL.SID_MAIN_NAME,
         SMAUC_REL.SID_RED_NAME,
         SUAS_INFO.SIPSBV_MAIN,
         SUAS_INFO.SIPSBV_RED,
         SMAUC_REL.CUST_ACCZONE_VLAN,
         SMAUC_REL.CUST_ACC_SUBNET,
         SMAUC_REL.SEC_ZONE_VLAN,
         SMAUC_REL.SEC_SUBNET,
         SMAUC_REL.GLBL_DMZ_VLAN,
         SMAUC_REL.GLBL_DMZ_SUBNET,
         SMAUC_REL.GLBL_DMZ_ZONE_IP GLBL_DMZ_ZONE_IP,
         SMAUC_REL.CUST_DMZ_VLAN,
         SMAUC_REL.CUST_DMZ_SUBNET,
         SMAUC_REL.CUST_PUB_IP_EDGE,
         SMAUC_REL.CUST_PUB_SBC_B2B_IP,
         SMAUC_REL.PUBLIC_REVRS_PRXY_MOB_IP,
         SMAUC_REL.CUST_REVERSEPROXYURL,
         SUAS_INFO.SBC_PORT_NO,
         SMAUC_REL.MAIN_SBC_DEVICE
    FROM SUAS_INFO
         LEFT OUTER JOIN SMAUC_REL
             ON SMAUC_REL.SMAUC_SERVICEID = SUAS_INFO.SMAUC_SERVICE_ID
ORDER BY SUAS_INFO.SUAS_SERVICE;
于 2017-06-16T15:44:53.767 回答
0

当遇到像您这样的多部分查询时,我会独立研究每个部分 - 并在我进行时使用解释计划。

例如,在您的原始查询中,第一个 CTE 包含以下内容:

 SELECT
    S.NAME SUAS_SERVICE
  , S.SERVICEID SUAS_SERVICE_ID
  , SUB.NAME SUBSCRIBER_NAME
  , SMAUC.SERVICEID SMAUC_SERVICE_ID
  , SMAUC.NAME SMAUC_SERVICE
  , SIPVPN_MAIN.NAME SIPVPN_MAIN_SERVICE
  , SIPVPN_RED.NAME SIPVPN_RED_SERVICE
  , SIPSBV.NAME SIPSBV_MAIN
  , SIPSBV_RED.NAME SIPSBV_RED
 FROM SERVICE S
 INNER JOIN SUBSCRIBER SUB ON SUB.SUBSCRIBERID = S.SERVICE2SUBSCRIBER AND S.SERVICE2SERVICETYPE = 1955100016
 --Fetching SMAUC service
 LEFT JOIN SERVICEOBJECT SO1 ON SO1.SERVICEOBJECT2SERVICE = S.SERVICEID AND SO1.SERVICEOBJECT2RELATION = 1955100029
 LEFT JOIN SERVICE SMAUC ON SMAUC.SERVICEID = SO1.SERVICEOBJECT2OBJECT
 --Fetching SIPVPN MAIN service
 LEFT JOIN SERVICEOBJECT SO2 ON SO2.SERVICEOBJECT2SERVICE = S.SERVICEID AND SO2.SERVICEOBJECT2RELATION = 1955100023
 LEFT JOIN SERVICE SIPVPN_MAIN ON SIPVPN_MAIN.SERVICEID = SO2.SERVICEOBJECT2OBJECT
 --Fetching SIPVPN Redundant service
 LEFT JOIN SERVICEOBJECT SO3 ON SO3.SERVICEOBJECT2SERVICE = S.SERVICEID AND SO3.SERVICEOBJECT2RELATION = 1955100042
 LEFT JOIN SERVICE SIPVPN_RED ON SIPVPN_RED.SERVICEID = SO3.SERVICEOBJECT2OBJECT
 --Fetching SBV SIP Trunk IMS service
 LEFT JOIN SERVICEOBJECT SO4 ON SO4.SERVICEOBJECT2SERVICE = S.SERVICEID AND SO4.SERVICEOBJECT2RELATION = 1955100030
 LEFT JOIN SERVICE SIPSBV ON SIPSBV.SERVICEID = SO4.SERVICEOBJECT2OBJECT
 --Fetching Redundant SBV SIP Trunk IMS service
 LEFT JOIN SERVICEOBJECT SO5 ON SO5.SERVICEOBJECT2SERVICE = S.SERVICEID AND SO5.SERVICEOBJECT2RELATION = 1955100031
 LEFT JOIN SERVICE SIPSBV_RED ON SIPSBV_RED.SERVICEID = SO5.SERVICEOBJECT2OBJECT

也许减少左连接的数量会有所帮助?

SELECT
      S1.NAME SUAS_SERVICE
    , S1.SERVICEID SUAS_SERVICE_ID
    , SUB.NAME SUBSCRIBER_NAME
    , listagg(case when SO.SERVICEOBJECT2RELATION = 1955100029 then s2.SERVICEID end, ',') SMAUC_SERVICE_ID
    , listagg(case when SO.SERVICEOBJECT2RELATION = 1955100029 then s2.NAME end, ',') SMAUC_SERVICE
    , listagg(case when SO.SERVICEOBJECT2RELATION = 1955100023 then s2.NAME end, ',') SIPVPN_MAIN_SERVICE
    , listagg(case when SO.SERVICEOBJECT2RELATION = 1955100042 then s2.NAME end, ',') SIPVPN_RED_SERVICE
    , listagg(case when SO.SERVICEOBJECT2RELATION = 1955100030 then s2.NAME end, ',') SIPSBV_MAIN
    , listagg(case when SO.SERVICEOBJECT2RELATION = 1955100031 then s2.NAME end, ',') SIPSBV_RED
FROM SERVICE S1 
INNER JOIN SUBSCRIBER SUB ON SUB.SUBSCRIBERID = S1.SERVICE2SUBSCRIBER 
LEFT JOIN SERVICEOBJECT SO ON SO.SERVICEOBJECT2SERVICE = S.SERVICEID
   AND SO.SERVICEOBJECT2RELATION IN (1955100029 , 1955100029, 1955100023, 1955100042, 1955100030, 1955100031)
LEFT JOIN SERVICE S2 ON SMAUC.SERVICEID = SO.SERVICEOBJECT2OBJECT
WHERE S1.SERVICE2SERVICETYPE = 1955100016
GROUP BY
      S1.NAME 
    , S1.SERVICEID 
    , SUB.NAME 

根据需要添加 regexp_relace。

继续下一个 CTE。

于 2017-06-15T10:04:10.127 回答
0

通过 SQL Tuning Advisor(如果获得许可)运行它。

此外,在外连接只是查找的情况下,您可以通过在选择列表中使用 select 语句来消除外连接(有时可以提高性能)。

于 2017-06-13T19:15:26.143 回答