Se a tabela sofre muito DML, não deve ter índice BITMAP. E vc tem que aumentar o grau de normalização da tabela gigante.
E vc tem que usar tipos de dados corretos. DATE para datas, NUMBER para números. Você coloca tudo como VARCHAR2 e depois converte para o tipo de dados correto no SELECt, você não está ajudando o Oracle. E se este DELETE ocorre repetidamente, você de usar BINDs Ricardo Portilho Proni Coordenador de Bancos de Dados - Solvo S/A - Oracle Database 10g Administrator Certified Professional (OCP) - Microsoft Certified Professional (MCP) - Microsoft Certified Technologt Specialist: SQL Server 2005 (MCTS) http://portilho.profissionaloracle.com.br On Wed, 2008-11-05 at 11:51 +0000, limaleodavid wrote: > Senhores > Bom dia .... > Tenho uma tabela que estou precisando diminuir o tempo de > execucao > dos processos, basicamente e uma tabela de transformacao (delete > eupdate ), hoje ela esta demorando ( 1/2 a 1 hora ), posso > reescrever esta query, mas antes preciso de uma luz, dos > conhecimentos de vcs, > > segue o desc da tabela ... > CREATE TABLE SIM_RFCDEV.TMP_PESSOA > ( > MANDT VARCHAR2(3 BYTE), > ID VARCHAR2(10 BYTE), > CD_PESSOA VARCHAR2(14 BYTE), > DT_INICIAL VARCHAR2(11 BYTE), > NM_RAZAO_SOCIAL VARCHAR2(70 BYTE), > DS_ENDERECO VARCHAR2(60 BYTE), > DS_BAIRRO VARCHAR2(60 BYTE), > DS_MUNICIPIO VARCHAR2(100 BYTE), > UF VARCHAR2(2 BYTE), > DS_PAIS VARCHAR2(20 BYTE), > NR_CEP VARCHAR2(8 BYTE), > NR_CNPJ_CPF VARCHAR2(14 BYTE), > NR_INSCR_EST VARCHAR2(20 BYTE), > NR_INSCR_MUNIC VARCHAR2(14 BYTE), > NR_CEI VARCHAR2(12 BYTE), > COD_GRUPOEMPRESA VARCHAR2(4 BYTE), > COD_EMPRESA VARCHAR2(4 BYTE), > COD_FILIAL VARCHAR2(4 BYTE), > DT_MOVIMENTO VARCHAR2(11 BYTE), > NR_INSCR_SUBST VARCHAR2(14 BYTE), > CD_SUFRAMA VARCHAR2(9 BYTE), > NR_NUMERO VARCHAR2(10 BYTE), > DS_COMPLEMENTO VARCHAR2(60 BYTE), > NR_CEP_CP VARCHAR2(8 BYTE), > NR_CP VARCHAR2(10 BYTE), > NR_FONE VARCHAR2(15 BYTE), > NR_FAX VARCHAR2(15 BYTE), > DM_RELACIONADO VARCHAR2(1 BYTE), > DT_INI_REL VARCHAR2(11 BYTE), > DT_FIN_REL VARCHAR2(11 BYTE), > NR_NIT VARCHAR2(11 BYTE), > CD_CNAE VARCHAR2(20 BYTE), > NR_CATEGORIA VARCHAR2(2 BYTE), > DT_IMPORTACAO VARCHAR2(11 BYTE), > ID_USUARIO_IMP VARCHAR2(5 BYTE), > NR_RG VARCHAR2(20 BYTE), > CD_MUNICIPIO VARCHAR2(7 BYTE), > CD_PAIS VARCHAR2(5 BYTE), > DM_OPTANTE_SIMP VARCHAR2(1 BYTE), > DS_EMAIL VARCHAR2(60 BYTE), > NR_TERMINAL_TEL VARCHAR2(10 BYTE), > NR_CONTA_CONS VARCHAR2(10 BYTE), > UF_HABILITACAO VARCHAR2(2 BYTE), > DS_FIM VARCHAR2(1 BYTE) > ); > > REATE TABLE SIM_RFCDEV.IN_IMPORTACAO > ( > ID_ARQUIVO NUMBER NOT NULL, > ID_EMPRESA NUMBER(4) NOT NULL, > DT_MOVIMENTO DATE NOT NULL, > DM_SITUACAO VARCHAR2(1 BYTE) NOT NULL, > ID_USUARIO NUMBER(5) NOT NULL, > DS_MOTIVO_ENCERRAMENTO CLOB > ); > > CREATE TABLE SIM_RFCDEV.CTRL_EMPRESA > ( > ID_EMPRESA NUMBER(4) NOT NULL, > NM_FANTASIA VARCHAR2(60 BYTE) NOT NULL, > ENDERECO_EMPRESA VARCHAR2(40 BYTE) NOT NULL, > NM_EMPRESA VARCHAR2(60 BYTE) NOT NULL, > BAIRRO_EMPRESA VARCHAR2(30 BYTE) NOT NULL, > CEP_EMPRESA VARCHAR2(10 BYTE) NOT NULL, > MUNICIPIO_EMPRESA VARCHAR2(25 BYTE) NOT NULL, > UF_EMPRESA VARCHAR2(2 BYTE) NOT NULL, > TELEFONE_EMPRESA VARCHAR2(20 BYTE), > FAX_EMPRESA VARCHAR2(20 BYTE), > EMAIL_EMPRESA VARCHAR2(60 BYTE), > CEI_EMPRESA VARCHAR2(20 BYTE), > INSCR_EMPRESA VARCHAR2(20 BYTE) NOT NULL, > CNPJ_EMPRESA VARCHAR2(20 BYTE) NOT NULL, > LICENCA_EMPRESA NUMBER(10) NOT NULL, > QTDE_USUARIO NUMBER(4) NOT NULL, > DT_INICIO DATE NOT NULL, > DT_FINAL DATE NOT NULL, > DM_IMPRIME_LOGO VARCHAR2(1 BYTE) NOT NULL, > ID_PESSOA NUMBER, > ID_FILIAL NUMBER, > ID_SEGMENTO_EMPRESA NUMBER(3) NOT NULL, > DT_ANIVERSARIO DATE, > COD_GRUPOEMPRESA VARCHAR2(4 BYTE), > NR_JUNTA_COMERCIAL VARCHAR2(20 BYTE), > DT_JUNTA_COMERCIAL DATE, > CNAE_EMPRESA VARCHAR2(9 BYTE), > COMPL_EMPRESA VARCHAR2(30 BYTE), > NUMERO_EMPRESA VARCHAR2(10 BYTE) NOT NULL, > CD_NIT NUMBER(11), > CD_MUNICIPIO_IBGE NUMBER(7), > NR_INSCR_MUNICIPAL VARCHAR2(20 BYTE), > NR_SUFRAMA VARCHAR2(9 BYTE), > DM_CENTRALIZACAO VARCHAR2(1 BYTE) NOT NULL, > NR_CEP_CP VARCHAR2(10 BYTE), > NR_CAIXA_POSTAL NUMBER, > NR_CACEAL NUMBER(9), > ALIQ_ICMS_ESTADO NUMBER(5,2) NOT NULL, > ID_REF_331_MUNICIPIO NUMBER, > NR_INSCR_SUBSTITUTO_TRIB NUMBER(14), > CD_BACEN VARCHAR2(20 BYTE), > CD_CVM VARCHAR2(20 BYTE), > CD_SUSEP VARCHAR2(20 BYTE), > CD_SPC VARCHAR2(20 BYTE), > NR_NIRE VARCHAR2(20 BYTE), > ID_NATUREZA_JURIDICA NUMBER, > DM_DECDIPJ VARCHAR2(1 BYTE), > COD_EMPRESA VARCHAR2(5 BYTE), > COD_FILIAL VARCHAR2(5 BYTE), > CD_ANP_AGENTE NUMBER(10), > LOGO BLOB, > ID_CNAE NUMBER, > NM_PREFEITURA VARCHAR2(200 BYTE), > CNPJ_PREFEITURA VARCHAR2(20 BYTE), > DM_REGIME_DECLARANTE VARCHAR2(1 BYTE), > COD_CLIENTE_SAP VARCHAR2(10 BYTE), > NR_REG_EXPORTACAO VARCHAR2(20 BYTE) > ); > > .. indices > CREATE INDEX IDX ON TMP_PESSOA(ID) NOLOGGING COMPUTE STATISTICS ; > > CREATE BITMAP INDEX IDX2 ON TMP_PESSOA > (COD_EMPRESA,COD_FILIAL) NOLOGGING COMPUTE STATISTICS ; > > lembrando que CTRL_EMPRESA tem poucos dados (2 mil no maximo), > e a IN_IMPORTACAO (200 mil ); > > TMP_PESSOA (APROX . 2 MILHOES ); > > SEGUE A QUERY ... > DELETE FROM TMP_PESSOA TMP > WHERE EXISTS ( SELECT IMP.* > FROM IN_IMPORTACAO IMP > WHERE IMP.ID_ARQUIVO IN ( 19,369,431) > AND IMP.DM_SITUACAO IN ( '4','5' ) > AND IMP.ID_EMPRESA = ( SELECT CTRL.ID_EMPRESA > FROM CTRL_EMPRESA CTRL > WHERE CTRL.COD_EMPRESA > = TRIM(TMP.COD_EMPRESA) AND (TMP.COD_EMPRESA IS NOT NULL OR > TMP.COD_FILIAL IS NOT NULL ) > AND > ((CTRL.COD_FILIAL IS NULL AND SUBSTR(CTRL.CNPJ_EMPRESA,12,4) = '0001') > OR > (CTRL.COD_FILIAL IS NOT NULL AND CTRL.COD_FILIAL = TRIM > (TMP.COD_FILIAL))) > AND ROWNUM = 1) > AND IMP.DT_MOVIMENTO = TO_DATE('01/'|| > TO_CHAR(TO_DATE > (TMP.DT_INICIAL),'MM') || '/' || > TO_CHAR(TO_DATE > (TMP.DT_INICIAL),'YYYY'),'DD/MM/YYYY')) > AND TMP.ID IS NOT NULL; > > desde ja agradeco > > > > > > [As partes desta mensagem que não continham texto foram removidas]