Ver Mensaje Individual
  #8 (permalink)  
Antiguo 01/12/2006, 22:49
yz!
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por Gabo77 Ver Mensaje
PequeñoMauro tiene razon, solo algunas observaciones:
En la consulta pones Ofertas.*, esto no es conveniente, y menos en un UNION mejor identifica los campos que vas a necesitar de la tabla Ofertas,
Use esto ya que es uan tabla con mas de 30 campos, la base de datos que me encontre es horrible, pero de momento no puedo reformarla.

Cita:
Iniciado por Gabo77 Ver Mensaje
haces un Join contra la tabla Contratacion_Servicios, y no muestras info de esta, te aconsejo que evites al máximo las clausulas Joins ya que son muy pesadas para el servidor por que utilizan tablas temnporales para evaluar el conjunto de resultados, mejor utiliza un EXISTS y veras la mejora en el rendimiento de tu consulta
Ok. No sabia esto, asi que he estado investigando y reforme la consulta como me dijiste, quedo así, por si el ejemplo le sirve a alguien:
Código:
SELECT Ofertas.*, Empresas.Nombre 
FROM Ofertas 
INNER JOIN Empresas 
ON Ofertas.ID_Empresa = Empresas.ID_EMPRESA 
WHERE ((ofertas.tipo_oferta = 1)
AND EXISTS(
    select *
    from Contratacion_Destinos
    where Ofertas.ID_DESTINO = Contratacion_Destinos.ID_DESTINO
    AND Contratacion_Destinos.Activo = 1
    AND (Contratacion_Destinos.FechaProrroga > GETDATE()) 
    AND EXISTS(
        select *
        from Contratacion_Servicios
        where Contratacion_Destinos.ID_PARAMETRO = Contratacion_Servicios.ID_PARAMETRO
        AND (UPPER(Contratacion_Servicios.Parametro) = 'OFERTADESTACADAS' 
        OR UPPER(Contratacion_Servicios.Parametro) = 'OFERTADESTACADAM')
    )
))
y para terminar con el union, solo tuve que agregar al final esta linea.
Código:
OR (Ofertas.id_tipo=12 AND Ofertas.oferta_archivada=0) 
ORDER BY Ofertas.Fecha DESC
Quedando todo mucho más limpio y como decias mejor rendimiento.

Muchas gracias a los dos.

PD: Aprendí mucho con esta consulta, cambiaré un montón de procedimientos almacenados en el servidor gracias a esto.