none
Como Optimizar o reducir el tiempo de mi consulta

    Question

  • Hola

    me gustaria saber como puedo optimizar este query pues actualmente esta teniendo 89231 reads y quisiera reducirlo al maximo, no soy un experto en Transact, quisiera me apoyen a mejorar. Gracias....

    SELECT  t1_id_trans AS dev_inst,

            0 AS aprobacion,

            0 AS incumplimiento,

            0 AS reingreso

    FROM    t_tabla1

    WHERE   t1_estatus_trans = 3

            AND t1_ruta = 10

    UNION

    SELECT  0 AS dev_inst,

            t2_id_trans AS aprobacion,

            0 AS incumplimiento,

            0 AS reingreso

    FROM    t_tabla2

    WHERE   t2_estatus = 1

            AND t2_estatus_sol = 1

    UNION

    SELECT  0 AS dev_inst,

            0 AS aprobacion,

            T3_id_trans AS incumplimiento,

            0 AS reingreso

    FROM    t_tabla3

    WHERE   t3_marca = 2

            AND t3_estatus = 1

    UNION

    Select  0 AS dev_inst,

            0 AS aprobacion,

             AS incumplimiento,

            T1_Id_Trans AS reingreso

    From    T_Tabla1

    Where   t1_Estatus_Trans = 8

     

    Wednesday, October 19, 2011 1:47 PM

Answers

  •  Hay una nueva información que SQL Server proporciona, desde la versión de SQL Server 2005 en adelante, se llama Missing Indexes. Cuando el Optimizador esta optimizando la consulta, puede indicarnos, si a esa consulta le falta o se beneficiaría de algún índice. El Optimizador proporciona esta información y la deja disponible en el plan de ejecución.
     
     Una advertencia obligada, es que veamos y utilicemos la información proporcionada por Missing Indexes, pero no siempre sigamos las indicaciones que nos proporciona. Básicamente, cuando nosotros nos encontremos con estas advertencias, hemos de pensar que QUIZAS tengamos un problema donde se nos indica. Pero no siempre es la mejor opción implementarla. Nosotros seremos quien tomemos la decisión de crear o no, ese índice.
     
      Hay una pequeña limitación de Missing Indexes, ya que no funcionaría cuando tenemos un plan de ejecución denominado como Trivial. Normalmente no nos tenemos que preocupar por este tipo de planes, pues casi todas las consultas que tenemos en nuestros servidores de producción, serán mas complicadas y no serán un plan trivial.
     
     Como plan trivial entenedemos: si presentamos una consulta simple (por ejemplo, en consultas sobre una sola tabla sin índices y sin campos agregados o cálculos) que en lugar de perder tiempo tratando de calcular el plan óptimo, el Optimizador simplemente aplicará un único plan trivial para ese tipo de consultas. Una forma simple de evitar estos planes triviales es creándonos un índice en la tabla que no tenga nada que ver con nuestra consulta, después estudiar nuestros plan de ejecución con los Missing Indexes sugeridos si los hubiere, y finalmente eliminar ese índice.

      Si la consulta no es trivial, el Optimizador llevará a cabo un cálculo basado en las estadísticas, y gracias a estas, hará una estimación de los registros a devolver por la consulta, punto de partida para iniciar la creación del plan de ejecución de la consulta.

     Si te fijas en tu plan de ejecución gráfico, (con el Management Studio) duedes encontrar el Missing Index,Si pinchas sobre el, con el botón derecho del ratón y seleccionas “Missing Index Detail”, te mostrará el comando a ejecutar o la sentencia CREATE exacta del índice que se nos aconseja crear.

     



     Norman M. Pardell 

    ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008

    Monday, October 24, 2011 2:38 PM
  • Hola.

    Podrías crear índices de cobertura para cada una de las consultas que componen la consulta de unión.

    create nonclustered index IX_t_tabla1_A1 on t_tabla1 (t1_estatus_trans, t1_ruta) include (t1_id_trans)
    
    create nonclustered index IX_t_tabla2_A1 on t_tabla2 (t2_status, t2_estatus_sol) include (t2_id_trans)
    
    create nonclustered index IX_t_tabla3_A1 on t_tabla3 (t3_marca, t3_status) include (t3_id_trans)
    

    Aunque sin conocer la estructura de las tablas, el índice clustered (si existe) y el resto de índices existentes, es posible que esto no sea lo más conveniente para tu caso. Si nos das esa información, te damos una orientación más precisa.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    Sunday, October 23, 2011 2:03 PM
    Moderator

All replies

  • Tendrías que pasarnos el plan de ejecución de la consulta, las estadísticas de E/S (ejecutando SET STATISTICS IO ON), así como la estructura de las tablas (incluyendo sus índices).

    También sería importante que nos dijeras la versión y edición de SQL Server

    Wednesday, October 19, 2011 1:56 PM
  • Hola.

    Podrías crear índices de cobertura para cada una de las consultas que componen la consulta de unión.

    create nonclustered index IX_t_tabla1_A1 on t_tabla1 (t1_estatus_trans, t1_ruta) include (t1_id_trans)
    
    create nonclustered index IX_t_tabla2_A1 on t_tabla2 (t2_status, t2_estatus_sol) include (t2_id_trans)
    
    create nonclustered index IX_t_tabla3_A1 on t_tabla3 (t3_marca, t3_status) include (t3_id_trans)
    

    Aunque sin conocer la estructura de las tablas, el índice clustered (si existe) y el resto de índices existentes, es posible que esto no sea lo más conveniente para tu caso. Si nos das esa información, te damos una orientación más precisa.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/ Sígueme en twitter en http://twitter.com/qwalgrande

    Sunday, October 23, 2011 2:03 PM
    Moderator
  •  Hay una nueva información que SQL Server proporciona, desde la versión de SQL Server 2005 en adelante, se llama Missing Indexes. Cuando el Optimizador esta optimizando la consulta, puede indicarnos, si a esa consulta le falta o se beneficiaría de algún índice. El Optimizador proporciona esta información y la deja disponible en el plan de ejecución.
     
     Una advertencia obligada, es que veamos y utilicemos la información proporcionada por Missing Indexes, pero no siempre sigamos las indicaciones que nos proporciona. Básicamente, cuando nosotros nos encontremos con estas advertencias, hemos de pensar que QUIZAS tengamos un problema donde se nos indica. Pero no siempre es la mejor opción implementarla. Nosotros seremos quien tomemos la decisión de crear o no, ese índice.
     
      Hay una pequeña limitación de Missing Indexes, ya que no funcionaría cuando tenemos un plan de ejecución denominado como Trivial. Normalmente no nos tenemos que preocupar por este tipo de planes, pues casi todas las consultas que tenemos en nuestros servidores de producción, serán mas complicadas y no serán un plan trivial.
     
     Como plan trivial entenedemos: si presentamos una consulta simple (por ejemplo, en consultas sobre una sola tabla sin índices y sin campos agregados o cálculos) que en lugar de perder tiempo tratando de calcular el plan óptimo, el Optimizador simplemente aplicará un único plan trivial para ese tipo de consultas. Una forma simple de evitar estos planes triviales es creándonos un índice en la tabla que no tenga nada que ver con nuestra consulta, después estudiar nuestros plan de ejecución con los Missing Indexes sugeridos si los hubiere, y finalmente eliminar ese índice.

      Si la consulta no es trivial, el Optimizador llevará a cabo un cálculo basado en las estadísticas, y gracias a estas, hará una estimación de los registros a devolver por la consulta, punto de partida para iniciar la creación del plan de ejecución de la consulta.

     Si te fijas en tu plan de ejecución gráfico, (con el Management Studio) duedes encontrar el Missing Index,Si pinchas sobre el, con el botón derecho del ratón y seleccionas “Missing Index Detail”, te mostrará el comando a ejecutar o la sentencia CREATE exacta del índice que se nos aconseja crear.

     



     Norman M. Pardell 

    ||Microsoft Certified IT Professional|| Database Administrator. Database Developer. SQL Server 2008

    Monday, October 24, 2011 2:38 PM