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

aumentar rendimiento de una consulta

Estas en el tema de aumentar rendimiento de una consulta en el foro de Mysql en Foros del Web. como puedo aumentar el rendimiento de la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original ( SELECT tdaVta ,     CASE encargopralVta     ...
  #1 (permalink)  
Antiguo 30/07/2018, 06:29
 
Fecha de Ingreso: agosto-2002
Ubicación: Lleida
Mensajes: 503
Antigüedad: 17 años, 2 meses
Puntos: 0
aumentar rendimiento de una consulta

como puedo aumentar el rendimiento de la siguiente consulta:

Código SQL:
Ver original
  1. (
  2. SELECT tdaVta,
  3.     CASE encargopralVta
  4.           WHEN 'S' THEN '1'  
  5.           WHEN 'N' THEN '2'  
  6.         END AS encargoPral ,
  7.     COUNT(*) AS numven, SUM(impnetoVta) AS impnet, SUM(impdtoVta) AS impdto, avg(impnetoVta) AS avgnet, avg(impdtoVta) AS avgdto
  8. FROM encargos
  9. WHERE YEAR(fechaVta) BETWEEN '$limany1' AND '$limany2' AND anuladaVta <>'S' AND promocionVta=$limpro1 AND impnetoVta > 0
  10. GROUP BY tdaVta, encargopral
  11. ORDER BY tdaVta, encargopral
  12. )
  13. UNION ALL                      
  14. (
  15. SELECT tdaVta, '3' AS encargopral, COUNT(*) AS numven, SUM(impnetoVta) AS impnet, SUM(impdtoVta) AS impdto, avg(impnetoVta) AS avgnet, avg(impdtoVta) AS avgdto
  16. FROM encargos
  17. WHERE
  18. YEAR(fechaVta) BETWEEN '$limany1' AND '$limany2' AND anuladaVta <>'S' AND promocionVta =$limpro1  AND impnetoVta=0
  19. GROUP BY tdaVta, encargopral
  20. ORDER BY tdaVta, encargopral )
  21.    
  22. ORDER BY  tdaVta, encargopral

funciona correctamente pero tarda 45 segundos en ejecutarse.


la tabla encargos tiene definidos los indices

Código SQL:
Ver original
  1. PRIMARY KEY (`clienteVta`, `numVta`),
  2.     UNIQUE INDEX `encarrec` (`tdaVta`, `encargoVta`),
  3.     INDEX `fechamontageTaller` (`fechamontageTaller`),
  4.     INDEX `fechapedidoTaller_horapedidoTaller` (`fechapedidoTaller`, `horapedidoTaller`),
  5.     INDEX `fechaVta` (`fechaVta`),
  6.     INDEX `monturaVta` (`monturaVta`),
  7.     INDEX `Pareja` (`tdaVta`, `parejaVta`),
  8.     INDEX `vendedorVta` (`vendedorVta`)

creo que si genero un indice en la tabla ganaria rendimiento pero no se como hacer que la busqueda sea por ese indice.

Última edición por gnzsoloyo; 30/07/2018 a las 10:39 Razón: Etiquetar correctamente con el HIGHLIGHT correspondiente a SQL, por favor...
  #2 (permalink)  
Antiguo 30/07/2018, 09:57
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 3 meses
Puntos: 774
Respuesta: aumentar rendimiento de una consulta

Aqui habria que ver el plan de ejecucion de la consulta y ya sobre eso ver que se puede hacer

https://www.adictosaltrabajo.com/tut...lain-en-mysql/
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/07/2018, 10:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.321
Antigüedad: 12 años
Puntos: 2653
Respuesta: aumentar rendimiento de una consulta

Por lo pronto, un par de consejos...
1) SI vas a usar un ORDER BY exterior (en la consulta principal), NO lo uses en las subconsultas. Estás obligando al DBMS a realizar una tare completamente inútil.
2) Muchos índices pueden afectar la performance de INSER, DELETE y UPDATE, y no siempre mejoran los resultados.

Para los reportes, en ciertas circunstancias debes usar el FORCE DEDEX, y en otros directamente impedir que los usen... Dadas ciertas condiciones, no es de extrañar que una busqueda sea mas rapida sin índices que con indices, aunque te parezca raro. Hay que valuar cuales son los campos que se filtran en el WHERE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: aumentar, busqueda, rendimiento, select, tabla
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 20:06.