SELECT 
D.SECT||CHR(9)||A.EXCH||CHR(9)||B.AFT||CHR(9)||A.FILE_NO||CHR(9)||REPLACE(REPLACE(REPLACE(B.LOC_NAME, CHR(13), ' '), CHR(10), ' '), CHR(9), ' ')||CHR(9)||REPLACE(REPLACE(REPLACE(B.LOC_ADDRESS, CHR(13), ' '), CHR(10), ' '), CHR(9), ' ')||CHR(9)||B.BLDG_TYPE||CHR(9)||B.BLDG_CLASS||CHR(9)||REPLACE(REPLACE(REPLACE(B.LOC_REM, CHR(13), ' '), CHR(10), ' '), CHR(9), ' ')||CHR(9)||TO_CHAR(B.BIS_DATE, 'DD-MON-YYYY')||CHR(9)||TO_CHAR(B.STOREY)||CHR(9)||TO_CHAR(B.R)||CHR(9)||TO_CHAR(B.AREA)||CHR(9)||TO_CHAR(B.FC_DEMAND)||CHR(9)||TO_CHAR(B.EST_BW_PAIRS)||CHR(9)||F.ARCH_CO_NAME||CHR(9)||G.DEV_NAME||CHR(9)||REPLACE(REPLACE(REPLACE(A.FILE_REM, CHR(13), ' '), CHR(10), ' '), CHR(9), ' ')||CHR(9)||DECODE(SIGN(TO_DATE('31-DEC-2998', 'DD-MON-YYYY')-NVL(TRUNC(A.FILE_BW_ASS_DATE), SYSDATE)), -1, NULL, TO_CHAR(A.FILE_BW_ASS_DATE, 'DD-MON-YYYY'))||CHR(9)||TWONINFO(B.BLDID, 'AAA')||CHR(9)||TWONINFO(B.BLDID, 'HCL')||CHR(9)|| TWONINFO(B.BLDID, 'NTT')||CHR(9)||TWONINFO(B.BLDID, 'NWT')||CHR(9)||TWONINFO(B.BLDID, 'WCL')||CHR(9)|| TWONINFO2(B.BLDID, 'OTH')||CHR(9)||TWO_N_INFO_NAME(B.BLDID)||CHR(9)||TO_CHAR(A.FILE_COMP_DATE, 'DD-MON-YYYY')||CHR(9)||BLDG_DPS1(B.BLDID)FROM 
OPI_PROJECT A, 
OPI_BUILDING B, 
BW_ACCESS C, 
BMS_EXCH_PCS D, 
ARCH_INFO E, 
ARCH_INFO F, 
TWON_BLDG_DEVELOPER G
WHERE 
A.EXCH <> 'ZZZ' 
AND A.EXCH =  D.EXCHG(+)
AND A.PJID = B.PJID(+) 
AND B.BLDID = C.BLDID 
AND A.ARCH_CODE = E.ARCH_CODE(+) 
AND A.DEVELOPER_CODE = F.ARCH_CODE(+) 
AND A.TWON_BLDG_DEV_CODE = G.DEV_CODE(+)
AND A.FILE_COMP_DATE >= TO_DATE('01-APR-1996', 'DD-MON-YYYY')
GROUP BY 
D.SECT, A.EXCH, B.BLDGCODE, B.AFT, A.FILE_NO, B.LOC_NAME, 
B.LOC_ADDRESS, B.BLDG_TYPE, B.BIS_DATE, B.LOC_REM,
B.BLDG_CLASS, B.STOREY, B.R, A.FILE_REM,
B.AREA, B.FC_DEMAND, B.EST_BW_PAIRS, F.ARCH_CO_NAME, A.FILE_BW_ASS_DATE, G.DEV_NAME, 
A.PJID, B.BLDID, A.FILE_COMP_DATE
ORDER BY 
A.EXCH, A.FILE_NO, B.BLDG_TYPE, A.FILE_COMP_DATE
不到一万条的记录,执行起来差不多要20分钟,为什么?

解决方案 »

  1.   

    啊????
    我连仔细看你SQL的勇气都没了...
      

  2.   

    你用PL/SQL 按下F5健 看看 有多少个表扫描!(如果你用的是Oracle的话)在连接时,用上Group by 就是表扫描了
      

  3.   

    oh my,这么多列,这么多函数,这么多条件,分组排序也不少,不慢才怪
      

  4.   

    应该是GROUP BY和大量的REPLACE()造成的性能问题。
      

  5.   

    性能能提高不?这句sql是用来生成报表导入到excel的。
      

  6.   

    我遇到过一次这样的事:某SQL在公司的测试机上执行一次用7秒(超慢),弄了1天没弄好
    后来放到服务器上(4颗CPU+12G内存)只用0.29秒
      

  7.   

    1.表连接太多,你这样算虽然结果就几万,组合起来是指数级的,用嵌套啦
    2.不要用replace啦,让程序去处理字符替换吧,不要让sql去做这个
    3.group by 整理一下,你这么多分组有几个有用的?用嵌套查询减少分组吧
    4.确实看了头疼用查询分析器慢慢调吧...