SQL Server Performance

Please comentarios

Discussion in 'Preguntas sobre SQL Server en Español.' started by fjac_pe, May 31, 2005.

  1. fjac_pe New Member

    Buenas, gracias por leer este post, mi consulta es que tan efectivo es hacer consultas de este tipo, lo he pasado por el optimizador de indices y no tengo recomendaciones, porque todos los indices necesarios ya fueron creados, es una buena manera de hacer las cosas? o preferible es separarlos y trabajar por separada la informacion. Mil gracias por sus comentarios.

    SELECT Tick_fech, TICKETS.cenc_codi, TICKETS.Line_codi,
    sum(cant_paqu) Canti, sum(Cant_Paqu * MinProd) TotTiempo, isnull(max(MinAsis),0) MinAsis
    FROM TICKETS
    inner join (select Esti_codi, Surt_codi, prendes_codi, sum(Tstd) MinProd
    from EstiPlantSecu group by Esti_codi, Surt_codi, prendes_codi) Secu
    on Secu.esti_codi = tickets.Esti_codi and secu.surt_codi = tickets.surt_codi and secu.prendes_codi = tickets.prendes_codi
    left join (select Asis.Fecha, Asig.Cenc_codi, Asig.Line_codi, sum(MinLabo + MinExtr - MinFalta) MinAsis from AsignacionLinea Asig
    inner join AsistenciaObrero Asis on Asis.Obre_codi = Asig.Obre_codi and Asis.Fecha = Asig.Fecha group by Asis.Fecha, Asig.Cenc_codi, Asig.Line_codi) TabAsis
    on TabAsis.Fecha = Tickets.Tick_fech and TabAsis.Cenc_codi = Tickets.Cenc_codi and TabAsis.Line_codi = tickets.Line_codi
    WHERE TICK_FECH = '24/05/05'
    AND TICK_LEID = 1 and Oper_codi = 1 and bloq_codi = 2 and fami_codi = 1
    group by tick_fech, TICKETS.Line_codi, TICKETS.cenc_codi, MinProd

  2. Luis Martin Moderator

    Esperemos a los expertos.


    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


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



  3. fjac_pe New Member

    De parte tuya que comentario podria obtener, eres una persona de mas experiencia de la que yo tengo, lo mismo que Maldon y otras personas que no recuerdo pero si lei sus respuestas a otros compañeros de este foro, mi logica o como yo pienso que funciona es que los select inferiores son ejecutados de manera a parte y luego se lleva a cabo el inner join, con la tabla superior, gracias.
  4. Luis Martin Moderator

    Lo que tu dices es cierto, la idea de esperar a algún experto programador es que, quizás, se pueda escribir el código en forma más eficiente.

    Luis Martin
    Moderator
    SQL-Server-Performance.com

    One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important
    Bertrand Russell


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



  5. amayral New Member

    Hola,

    En principio una de las optimizaciones que haría es que si filtras los subselects por la misma fecha que vas a filtrar la tabla TICKETS, te ahorraras un monton de tiempo al evitar que se hagan cálculos que luego no vas a filtrar por ejemplo:

    SELECT Tick_fech
    , TICKETS.cenc_codi
    , TICKETS.Line_codi
    , sum(cant_paqu) Canti
    , sum(Cant_Paqu * MinProd) TotTiempo
    , isnull(max(MinAsis),0) MinAsis
    FROM TICKETS
    inner join (select Esti_codi, Surt_codi, prendes_codi, sum(Tstd) MinProd
    from EstiPlantSecu
    group by Esti_codi, Surt_codi, prendes_codi) Secu
    on Secu.esti_codi = tickets.Esti_codi
    and secu.surt_codi = tickets.surt_codi
    and secu.prendes_codi = tickets.prendes_codi
    left join (select Asig.Cenc_codi, Asig.Line_codi,
    sum(MinLabo + MinExtr - MinFalta) MinAsis
    from AsignacionLinea Asig
    inner join AsistenciaObrero Asis
    on Asis.Obre_codi = Asig.Obre_codi
    and Asis.Fecha = Asig.Fecha
    WHERE Asig.Fecha = '24/05/05'
    group by Asig.Cenc_codi, Asig.Line_codi) TabAsis
    on TabAsis.Cenc_codi = Tickets.Cenc_codi
    and TabAsis.Line_codi = tickets.Line_codi
    WHERE TICK_FECH = '24/05/05'
    AND TICK_LEID = 1
    and Oper_codi = 1
    and bloq_codi = 2
    and fami_codi = 1
    group by tick_fech, TICKETS.Line_codi, TICKETS.cenc_codi, MinProd
  6. c_maldon Member

    Yo prefiero separarlo en tablas temporarias, por que les puedo poner indices y tengo más control sobre la performance.

    Por otro lado el código me resulta más claro cuando lo tengo que modificar muchos meses después.

    No es que no utilice selects en la clausula FROM, pero en consultas son funciones agregadas prefiero tablas temporarias.

    Para conjuntos chicos me resulta bien, declarar variables tipo tabla. Que se comportan como tablas temporarias pero utilizan menos recursos del sistema. Siempre les declaro PRIMARY KEY.

    Saludos

Share This Page