Informix - In versus exists

 
Vista:

In versus exists

Publicado por Nauj (7 intervenciones) el 27/10/2001 13:27:18
Hola,
Tengo una select que quiero reducir en tiempo. La tengo hecha utilizando
el operador in y me han aconsejado rehacer la sql empleando exists
en lugar de in. Se supone que esto debería reducir el tiempo, pero
en mi caso lo aumenta, quiero saber si estoy utilizando correctamente
el operador exists o se puede escribir la select de un modo que sea más
eficiente. Si alguien me puede ayudar o dar un consejillo se
lo agradezco. La tabla2 tiene como 3 veces más registros que la tabla1
y todos los campos de búsqueda son clave primaria en tabla1.

IN:
select * from tabla1 where campo1 = '0209' and campo2 = '212'
and campo3 = '000'
and campo4||campo5||campo6 in
(select distinct campo4||campo5||campo6
from tabla2 where campo1 = '0209' and campo2 = '212'
and campo3 = '000')

EXISTS:
select * from tabla1 a where a.campo1 = '0209' and a.campo2 = '212'
and a.campo3 = '000'
and exists
(select *
from tabla2 b where b.campo1 = '0209' and b.campo2 = '212'
and b.campo3 = '000'
and b.campo4 = a.campo4 and b.campo5 = a.campo5
and b.campo6 = a.campo6)


Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:In versus exists

Publicado por Eduardo Vera (5 intervenciones) el 30/10/2001 00:00:09
Consejo1: Los campos de comparacion entre las dos tablas tienen que ser del mismo tipo. ej. CHAR = CHAR, INTEGER = INTEGER.

Ej.
SELECT a.*
FROM tabla1 a
WHERE
a.folio IN (SELECT b.folio
FROM tabla2 b
WHERE
a.folio = b.folio)

Donde a.folio y b.folio Son INTEGER

Consejo2: Crea una tabla temporal con la tabla de menos registros y despues las comparas. Y si haces esto, crea la estructura de la tabla primero ej. CREATE TEMP TABLE tmp_01
(campo1 INTEGER
,campo2 CHAR(13)) WITH NO LOG LOCK MODE ROW

INSERT INTO tmp_01
SELECT * FROM tabla1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar