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]

Responder a