SELECT PARTY.PARTY_ID AS PARTYID,
       PARTY.NAME AS PARTYNAME,
       PARTY.AREA_ID AS AREAID,
       PARTY.DEFAULT_ID_TYPE AS DEFAULTIDTYPE,
       PARTY.PARTY_TYPE_CD AS PARTYTYPECD,
       PARTY.ADDRESS_ID AS ADDRESSID,
       PARTY.ADDRESS_STR AS ADDRESSSTR,
       PARTY.SIMPLE_SPELL AS SIMPLESPELL,
       PARTY.BUSINESS_PASSWORD AS BUSINESSPASSWORD,
       PARTY.CREATE_DT AS CREATEDT,
       PARTY.VERSION AS PARTYVERSION,
       PARTY.INDUSTRY_CLASS_CD AS INDUSTRYCLASSCD,
       PARTY.QUERY_PASSWORD AS QUERYPASSWORD,
       PARTY.PARTY_STATUS_CD AS PARTYSTATUSCD,
       PARTY.CREATOR,
       I.IDENTIDIES_TYPE_CD AS IDENTIDIESTYPECD,
       I.IDENTITY_NUM AS IDENTITYNUM,
       (SELECT A.NAME FROM AREA A WHERE A.AREA_ID = 21) AS AREANAME
  FROM PARTY PARTY
  LEFT OUTER JOIN PARTY_IDENTITY I ON PARTY.PARTY_ID = I.PARTY_ID
 WHERE PARTY.AREA_ID IN
       (SELECT A.AREA_ID
          FROM AREA A
         START WITH A.AREA_ID = 21
        CONNECT BY PRIOR A.AREA_ID = A.PARENT_AREA)
   AND PARTY.SIMPLE_SPELL = 'LYX'
   AND ROWNUM < 10 
实际开发中写的sql语句,第一次执行很慢,后来执行很快,页面点击查询时有时候失败,有时候成功
出错时系统直接报ORA-01013 用户请求取消当前的操作
请教各位高手怎么解决,用的是oracle?

解决方案 »

  1.   

    左关联用a.PARTY_ID = I.PARTY_ID(+)代替,去了AS,用EXISTS代替IN(EX:select a.* from tb_a a where exists (select 'X' from tb_b b where a.id = b.id))
      

  2.   


     SELECT PARTY.PARTY_ID        AS PARTYID,
            PARTY.AREA_ID         AS AREAID,
            PARTY.NAME            AS PARTYNAME,
            PARTY.DEFAULT_ID_TYPE AS DEFAULTIDTYPE,
            I.IDENTITY_NUM        AS IDENTITYNUM,
            I.IDENTIDIES_TYPE_CD  AS IDENTIDIESTYPECD,
            A.NAME                AS AREANAME
       FROM PARTY PARTY
       LEFT OUTER JOIN PARTY_IDENTITY I ON PARTY.PARTY_ID = I.PARTY_ID
       LEFT OUTER JOIN AREA A ON PARTY.AREA_ID = A.AREA_ID
      WHERE EXISTS (SELECT 1
               FROM AREA A
              WHERE PARTY.AREA_ID = A.AREA_ID
              START WITH A.AREA_ID = 21
             CONNECT BY PRIOR A.AREA_ID = A.PARENT_AREA)
        AND PARTY.PARTY_STATUS_CD = 1
        AND PARTY.NAME = '李天'
        AND ROWNUM < 10这样查询快了很多 能否再改进下