Napoleão, 

 

Crie um indice nas colunas CAMPO da tabela TABELA

Crie um indice na coluna CAMPO da #TMP

Crie um indice na coluna CAMPOB da #TMP2

 

Depois altere o seu insert into #TMP3 para:

insert into #TMP3 
SELECT Y.CAMPO1, Y.CAMPO2 
FROM TABELA Y

WHERE Y.CAMPO = 'ALGUMA COISA'

AND NOT EXISTS (SELECT 1 FROM #TMP WHERE CODIGO = Y.CAMPO) 
AND EXISTS ( SELECT 1 FROM #TMP2 WHERE CODIGO = Y.CAMPOB )

 

Abs,

 

Carlos Martello

DBA Oracle / Consultor de Tecnologia

TEL:  55+21+3094-6250

Choice Technologies S/A - Inteligência em Energia

e-mail: [EMAIL PROTECTED]

 

De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Napoleão 
Cristiano X. Sanabia
Enviada em: terça-feira, 25 de novembro de 2008 14:19
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Melhor Performance

 

Pessoal

Tenho um sistema que cria 3 tabelas temporárias, insere dados nelas e as 
utiliza em outras queries.

Só que a minha tabela #TMP2 tem bastante registros e tá deixando todo meu 
procedimento lento.

Questão: Ilustrei abaixo o que o programa está fazendo. Qualç seria a melhor 
forma de resolver meu problema de performance nesse caso?

CREATE TABLE #TMP (codigo varchar(50) primary key) 
insert into #tmp 
SELECT DISTINCT campo1, campo 2
from tabela
where campo1 = 1

CREATE TABLE #TMP2 (CODIGO VARCHAR(50)) 
INSERT INTO #TMP2 
SELECT DISTINCT campo1, campo 2
from tabela2
where campo = 1

CREATE TABLE #TMP3 (TIPO VARCHAR(100), NM_TIPO VARCHAR(100)) 
insert into #TMP3 
SELECT Y.CAMPO1, Y.CAMPO2 
FROM (SELECT CAMPOA, CAMPOB FROM TABELA WHERE CAMPO = 'ALGUMA COISA') Y 
WHERE Y.CAMPO NOT IN ( SELECT CODIGO FROM #TMP ) 
AND Y.CAMPOB IN ( SELECT CODIGO FROM #TMP2 )

SELECT * FROM TABELA
UNION 
SELECT * FROM #TMP3

Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]

 



[As partes desta mensagem que não continham texto foram removidas]

Responder a