Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Tunning de Query

Estas en el tema de Tunning de Query en el foro de SQL Server en Foros del Web. Hola a todos. Pues como el nombre lo indica, me pueden dar sugerencias para tunnear este query @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT CASE ...
  #1 (permalink)  
Antiguo 06/03/2014, 15:03
 
Fecha de Ingreso: septiembre-2008
Mensajes: 152
Antigüedad: 15 años, 6 meses
Puntos: 1
Pregunta Tunning de Query

Hola a todos.

Pues como el nombre lo indica, me pueden dar sugerencias para tunnear este query

Código SQL:
Ver original
  1. SELECT CASE
  2.            WHEN DG.TotDiasDEvengar = 0 THEN
  3.              0
  4.            ELSE
  5.              DG.PrecioImporte * (DG.CEPrograma_Ene / DG.TotDiasDEvengar)
  6.          END AS Imp_M01_Ene
  7.        , CASE
  8.            WHEN DG.TotDiasDEvengar = 0 THEN
  9.              0
  10.            ELSE
  11.              DG.PrecioImporte * (DG.CEPrograma_Feb / DG.TotDiasDEvengar)
  12.          END AS Imp_M02_Feb
  13.        , CASE
  14.            WHEN DG.TotDiasDEvengar = 0 THEN
  15.              0
  16.            ELSE
  17.              DG.PrecioImporte * (DG.CEPrograma_Mar / DG.TotDiasDEvengar)
  18.          END AS Imp_M03_Mar
  19.        , CASE
  20.            WHEN DG.TotDiasDEvengar = 0 THEN
  21.              0
  22.            ELSE
  23.              DG.PrecioImporte * (DG.CEPrograma_Abr / DG.TotDiasDEvengar)
  24.          END AS Imp_M04_Abr
  25.        , CASE
  26.            WHEN DG.TotDiasDEvengar = 0 THEN
  27.              0
  28.            ELSE
  29.              DG.PrecioImporte * (DG.CEPrograma_May / DG.TotDiasDEvengar)
  30.          END AS Imp_M05_May
  31.        , CASE
  32.            WHEN DG.TotDiasDEvengar = 0 THEN
  33.              0
  34.            ELSE
  35.              DG.PrecioImporte * (DG.CEPrograma_Jun / DG.TotDiasDEvengar)
  36.          END AS Imp_M06_Jun
  37.        , CASE
  38.            WHEN DG.TotDiasDEvengar = 0 THEN
  39.              0
  40.            ELSE
  41.              DG.PrecioImporte * (DG.CEPrograma_Jul / DG.TotDiasDEvengar)
  42.          END AS Imp_M07_Jul
  43.        , CASE
  44.            WHEN DG.TotDiasDEvengar = 0 THEN
  45.              0
  46.            ELSE
  47.              DG.PrecioImporte * (DG.CEPrograma_Ago / DG.TotDiasDEvengar)
  48.          END AS Imp_M08_Ago
  49.        , CASE
  50.            WHEN DG.TotDiasDEvengar = 0 THEN
  51.              0
  52.            ELSE
  53.              DG.PrecioImporte * (DG.CEPrograma_Sep / DG.TotDiasDEvengar)
  54.          END AS Imp_M09_Sep
  55.        , CASE
  56.            WHEN DG.TotDiasDEvengar = 0 THEN
  57.              0
  58.            ELSE
  59.              DG.PrecioImporte * (DG.CEPrograma_Oct / DG.TotDiasDEvengar)
  60.          END AS Imp_M10_Oct
  61.        , CASE
  62.            WHEN DG.TotDiasDEvengar = 0 THEN
  63.              0
  64.            ELSE
  65.              DG.PrecioImporte * (DG.CEPrograma_Nov / DG.TotDiasDEvengar)
  66.          END AS Imp_M11_Nov
  67.        , CASE
  68.            WHEN DG.TotDiasDEvengar = 0 THEN
  69.              0
  70.            ELSE
  71.              DG.PrecioImporte * (DG.CEPrograma_Dic / DG.TotDiasDEvengar)
  72.          END AS Imp_M12_Dic
  73.        , CASE
  74.            WHEN DG.TotDiasDEvengar = 0 THEN
  75.              0
  76.            ELSE
  77.              DG.PrecioImporte * (DG.CEPrograma_Tran1 / DG.TotDiasDEvengar)
  78.          END AS Imp_M13_EneAs
  79.        , CASE
  80.            WHEN DG.TotDiasDEvengar = 0 THEN
  81.              0
  82.            ELSE
  83.              DG.PrecioImporte * (DG.CEPrograma_Tran2 / DG.TotDiasDEvengar)
  84.          END AS Imp_M14_FebAs

La verdad no me surge ninguna idea para reducir la carga al servidor, esto es un fragmento del código, se hizo así para que se generen muchas columnas a partir de una decisión pero la verdad no se me ocurre mucho.

Con una sola decisión me refiero a que este código es el mismo para todas las decisiones.

Código SQL:
Ver original
  1. CASE WHEN DG.TotDiasDEvengar = 0 THEN 0 ELSE ...

Agradezco de antemano su visita y consejo.

Saludos

Última edición por gnzsoloyo; 06/03/2014 a las 16:46
  #2 (permalink)  
Antiguo 06/03/2014, 15:08
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Tunning de Query

a lo que veo eso lo haces para evitar la division entre 0,

porque no intentas esto




Código SQL:
Ver original
  1. SELECT
  2. isnull( (DG.PrecioImporte * (DG.CEPrograma_Ene / DG.TotDiasDEvengar)),0) AS imp_enero
  3. .
  4. .
  5. .
  6. .
  7. FROM tabla WHERE DG.TotDiasDEvengar>0

asi te evitas todos los case que estas usando :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: columnas, query, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:26.