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

optimizar consulta mysql

Estas en el tema de optimizar consulta mysql en el foro de Mysql en Foros del Web. hola a todos tengo un problema en una consulta sql la cual se esta demorando mas de un minuto, quisiera saber si pueden ayudar a ...
  #1 (permalink)  
Antiguo 14/07/2016, 14:53
Avatar de shake2427  
Fecha de Ingreso: julio-2011
Mensajes: 116
Antigüedad: 12 años, 9 meses
Puntos: 3
Pregunta optimizar consulta mysql

hola a todos

tengo un problema en una consulta sql la cual se esta demorando mas de un minuto, quisiera saber si pueden ayudar a optimizarla lo mas posible, yo he realizado lo mas posible, todos los campos que se usan de busquedad ya estan indexados y no se que mas hacerle.

Código SQL:
Ver original
  1. SELECT
  2.     YEAR(a.fecha_creacion) AS years,
  3.     MONTH(a.fecha_creacion) AS mes,
  4.     b.num_semana AS semana,
  5.     c.tipo_liquidacion,
  6.     e.zona AS zona,
  7.     d.nombre AS tecnico,
  8.     f.suerte AS sectorsuerte,
  9.     f.sector,
  10.     h.codigo AS codigolabor,
  11.     h.labor AS labor,
  12.     g.codigo AS codigoservicio,
  13.     g.servicio AS servicio,
  14.     l.nombre AS proveedor,
  15.     l.nit AS nitproveedor,
  16.     i.unidad_medida AS unidad_medida,
  17.     c.cantidad_solicitada,
  18.     c.valor_programa,
  19.     c.cantidad_recibida,
  20.     c.valorprograma_liquidacion,
  21.     (SELECT
  22.             solicitud_pedido
  23.         FROM
  24.             ok_reportesap_det
  25.         WHERE
  26.             fk_detalle = c.id
  27.         ORDER BY id DESC
  28.         LIMIT 0 , 1) AS solicitud_pedido,
  29.     a.id,
  30.     a.tipo,
  31.     c.num_centrodecosto,
  32.     c.num_cuenta,
  33.     c.num_orden,
  34.     c.id,
  35.     c.id AS iddetallapro
  36. FROM
  37.     ok_programacion AS a
  38.         INNER JOIN
  39.     ok_semana_det AS b ON b.id = a.fk_semana
  40.         INNER JOIN
  41.     ok_programacion_det AS c ON c.fk_programacion = a.id
  42.         INNER JOIN
  43.     ok_usuarios AS d ON d.id = c.autor
  44.         LEFT JOIN
  45.     ok_zonas AS e ON e.id = d.fk_zona
  46.         LEFT JOIN
  47.     ok_maestrosuertes AS f ON f.id = c.fk_maestrosuertes
  48.         INNER JOIN
  49.     ok_servicios AS g ON g.id = c.fk_servicio
  50.         INNER JOIN
  51.     ok_labores AS h ON h.id = g.fk_labor
  52.         INNER JOIN
  53.     ok_proveedores AS l ON l.id = c.fk_proveedor
  54.         INNER JOIN
  55.     ok_unidadmedida AS i ON i.id = g.fk_unidad
  56. WHERE
  57.     a.fk_empresa = 2
  58.         AND ((a.tipo = 1 AND a.estado = 7)
  59.         OR (a.tipo = 2 AND a.estado = 4))
  60.         AND c.estado = 1
  61.         AND YEAR(a.fecha_creacion) IN (2014 , 2015, 2016)
  62.         AND MONTH(a.fecha_creacion) IN (1 , 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
  63. ORDER BY b.num_semana DESC , a.tipo ASC


gracias
  #2 (permalink)  
Antiguo 14/07/2016, 15:05
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: optimizar consulta mysql

Quitale los in, y usas exists, quita ese subquery que tienes dentro del select y ponlo como un join, para lo de fechas porque usas el mes si estas buscando en los 12 meses del año?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 15/07/2016, 14:04
Avatar de shake2427  
Fecha de Ingreso: julio-2011
Mensajes: 116
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: optimizar consulta mysql

Cita:
Iniciado por Libras Ver Mensaje
Quitale los in, y usas exists, quita ese subquery que tienes dentro del select y ponlo como un join, para lo de fechas porque usas el mes si estas buscando en los 12 meses del año?
hola

lo uso asi por que las variables del año y del mes pueden ser variables ya que las puede escoger el usuario.
por decir el usuario puede escoger muestre el año 2015 y 2016 pero solo los mes 3,4,6.
la puse asi con todos los meses por que ese seria el peor de los casos que es donde esta sucediendo que se demore la consulta tanto tiempo.

Etiquetas: bd, query
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 19:12.