SQL Server Performance

sobre exists y comando In

Discussion in 'Preguntas sobre SQL Server en Español.' started by fjac_pe, Aug 28, 2006.

  1. fjac_pe New Member

    Hola, que diferencia tengo al usar un comando In con un Exists, me dicen que el exists es mas rapido, pero mientras en una consulta en condicion digo que por ejemplo, que en este mes no exista la factura en las facturas de mascotas y el resto si.

    digamos algo asi

    select * from ProvisionFactura
    where nro_factu not in (select * from LiquidacionFactura and mesfactu = '08')
    and mesfactu = '08'

    me dicen mejor

    select * from ProvisionFactura t1
    where not exists (select * from LiquidacionFactura t2 where t1.nro_factu = t2.nro_factu
    and mesfactu = '08')
    and mesfactu = '08'

    y yo opino algo adicional, que sucede si le coloco un top y pongo un campo en lugar de "*"

    select * from ProvisionFactura t1
    where not exists (select top 1 nro_factu from LiquidacionFactura t2 where t1.nro_factu = t2.nro_factu and mesfactu = '08')
    and mesfactu = '08'

    si uso el "In", mejor es colocarlo en una tabla y luego hacer la consulta

    select nro_factu into #tmpfactuliq from LiquidacionFactura and mesfactu = '08'

    select * from ProvisionFactura
    where nro_factu not in (select nro_factu from tmpfactuliq )
    and mesfactu = '08'

    esto seria si una factura tiene liquidaciones parciales, cada factura se va pagando, se que mejor es manejar un campo en la provision para saber si se liquido o no, pero este es un ejemplo, el codigo que uso es de inversiones y es mas grande la validacion pero mi consulta sobre estos comandos.

    Espero me puedas brindar conocimientos sobre estos temas, en los libros hablan de su uso pero no he visto o no se buscar donde hablen de sus comparaciones y buenas practicas para su uso adecuado.

    Muchas gracias
  2. Luis Martin Moderator

    Lo habitual es usar el not in para una lista.
    not in ('a','x1', etc.) y el not exist en un select como tu lo has escrito.
    Lo importante es que tengas los ìndices adecuados.



    Luis Martin
    Moderator
    SQL-Server-Performance.com

    All in Love is Fair
    Stevie Wonder


    All postings are provided “AS IS” with no warranties for accuracy.



Share This Page