Blog

Optimización de bases de datos MySQL

¿Problemas con el rendimiento de tu MySQL?

Si tu base de datos de MySQL no rinde como debiera, contáctanos y realizaremos una optimización MySQL en tu servidor o plataforma para mejorar dicho rendimiento:

  • Tuning de la configuración del servidor: modifcamos la configuración de INNODB, buffers, tamaños de cachés, etc. para sacar el máximo posible al servidor
  • Análisis del modelo de datos y mejora del mismo incluyendo particionamiento vertical y horizontal en casos necesarios
  • Correción de índices y claves a partir de patrones de ejecución de consultas
  • Análisis y optimización de SQL en queries lentas
  • Documentación con explicaciones de las acciones realizadas, reportes sobre ejecución de queries y guía de buenas prácticas futuras

¿Quieres ver como optimizamos consultas?

Aquí tienes algunos ejemplos reales encontrados en optimizaciones realizadas a clientes o pruebas de concepto realizadas:

Query 1
Original - Tiempo medio de ejecución: 0,99 segundos
Optimizada - Tiempo medio de ejecución: 0,07 segundos
SELECT id_usuario, login, nombre,
apellido, sexo, img_fichero,
img_updatefecha, id_pais, id_lugar, tot_contactos
FROM USUARIOS
WHERE
baja=0 AND
(id_usuario IN
      (SELECT id_agregado
       FROM CONTACTOS
       WHERE id_agregante=1518 AND activo=1)
OR
id_usuario IN
      (SELECT id_agregante
       FROM CONTACTOS
       WHERE id_agregado=1518 AND activo=1 ))
ORDER BY fecha_ultimo_post DESC
(SELECT USUARIOS.id_usuario, login, nombre,
apellido, sexo, img_fichero,
img_updatefecha, id_pais, id_lugar,
tot_contactos, USUARIOS.fecha_ultimo_post
FROM USUARIOS JOIN CONTACTOS ON 
       USUARIOS.id_usuario=CONTACTOS.id_agregado
WHERE USUARIOS.baja=0 AND
       CONTACTOS.id_agregante=1518
       AND CONTACTOS.activo=1
)
UNION DISTINCT
(
SELECT USUARIOS.id_usuario, login, nombre,
apellido, sexo, img_fichero,
img_updatefecha, id_pais, id_lugar,
tot_contactos, USUARIOS.fecha_ultimo_post
FROM USUARIOS JOIN CONTACTOS ON
       USUARIOS.id_usuario=CONTACTOS.id_agregante
WHERE USUARIOS.baja=0 AND
       CONTACTOS.id_agregado=1518
       AND CONTACTOS.activo=1
)
ORDER BY fecha_ultimo_post desc;


Query 2
Original - Tiempo medio de ejecución: 1,03 segundos
Optimizada - Tiempo medio de ejecución: 0,03 segundos
SELECT p.* 
FROM payment p
WHERE p.payment_date = 
    (SELECT MAX(payment_date) 
     FROM payment 
     WHERE customer_id=p.customer_id
     )
SELECT p.*
FROM (
   SELECT customer_id, MAX(payment_date) as last_order
   FROM payment
   GROUP BY customer_id
 ) AS last_orders
INNER JOIN payment p
          ON p.customer_id = last_orders.customer_id
          AND p.payment_date = last_orders.last_order


Query 3
Original - Consulta no cacheable
Optimizada - Consulta cacheable
SELECT *
FROM Orders
WHERE TO_DAYS(CURRENT_DATE())
          – TO_DAYS(order_created) <= 7
SELECT order_id, customer_id,
order_total, order_created
FROM Orders
WHERE order_created >= '2013-02-01'
             - INTERVAL 7 DAY


Query 4
Original - Tiempo medio de ejecución: 2,21 segundos
Optimizada - Tiempo medio de ejecución: 0,20 segundos
SELECT id_post, id_usuario, id_tipo_envio_post,
texto, tipo, num_comentarios, fecha_publicacion,
priv, vidupl_file, vidupl_img, vidmov_file,
vidmov_img, vidcam_file, vidcam_img,
vid_id_youtube, vid_tit_youtube, 
vid_thumb_youtube, vid_time_youtube,
mus_id_youtube, mus_tit_youtube, 
mus_time_youtube, img_fichero,
link_tit, link_url, link_texto, link_img, evento_tit,
evento_categoria, evento_tipo,
evento_fecha_inicio, evento_fecha_fin,
evento_telefono_contacto, evento_email,
evento_pagina_web, evento_img_site,
evento_img_site_size, map_direccion,
evento_cancelado,map_latitud, map_longitud,
map_zoom, map_id_pais
FROM POSTS
WHERE
(id_usuario=31436
OR id_usuario in
      (SELECT id_agregado
       FROM CONTACTOS
       WHERE id_agregante=31436 and activo=1)
OR id_usuario in
      (SELECT id_agregante 
       FROM CONTACTOS 
       WHERE id_agregado=31436 and activo=1)
      )
AND (priv=0 or priv=1) AND eliminado=0 AND
eliminado_baja=0 AND es_spam=0
ORDER BY id_post DESC
(SELECT p.id_post, p.id_usuario,
p.id_tipo_envio_post, p.texto, p.tipo,
p.num_comentarios, p.fecha_publicacion, 
p.priv, p.vidupl_file, p.vidupl_img, p.vidmov_file,
p.vidmov_img, p.vidcam_file, p.vidcam_img,
p.vid_id_youtube, p.vid_tit_youtube,
p.vid_thumb_youtube, p.vid_time_youtube,
p.mus_id_youtube, p.mus_tit_youtube,
p.mus_time_youtube, p.img_fichero,
p.link_tit, p.link_url, p.link_texto, p.link_img,
p.evento_tit, p.evento_categoria, p.evento_tipo,
p.evento_fecha_inicio, p.evento_fecha_fin,
p.evento_telefono_contacto, p.evento_email,
p.evento_pagina_web, p.evento_img_site,
p.evento_img_site_size, p.map_direccion,
p.evento_cancelado, p.map_latitud,
p.map_longitud, p.map_zoom, p.map_id_pais
FROM POSTS p JOIN CONTACTOS c 
ON p.id_usuario=c.id_agregado
WHERE
      (p.priv=0 OR p.priv=1) AND
      p.eliminado=0 AND
      p.eliminado_baja=0 AND
      p.es_spam=0 AND
      c.id_agregante=31436 AND
      c.activo=1
)
UNION DISTINCT
(SELECT p.id_post, p.id_usuario,
p.id_tipo_envio_post, p.texto, p.tipo,
p.num_comentarios, p.fecha_publicacion, 
p.priv, p.vidupl_file, p.vidupl_img, p.vidmov_file,
p.vidmov_img, p.vidcam_file, p.vidcam_img,
p.vid_id_youtube, p.vid_tit_youtube,
p.vid_thumb_youtube, p.vid_time_youtube,
p.mus_id_youtube, p.mus_tit_youtube,
p.mus_time_youtube, p.img_fichero,
p.link_tit, p.link_url, p.link_texto, p.link_img,
p.evento_tit, p.evento_categoria, p.evento_tipo,
p.evento_fecha_inicio, p.evento_fecha_fin,
p.evento_telefono_contacto, p.evento_email,
p.evento_pagina_web, p.evento_img_site,
p.evento_img_site_size, p.map_direccion,
p.evento_cancelado, p.map_latitud,
p.map_longitud, p.map_zoom, p.map_id_pais
FROM POSTS p JOIN CONTACTOS c 
ON p.id_usuario=c.id_agregante
WHERE
      (p.priv=0 OR p.priv=1) AND
      p.eliminado=0 AND
      p.eliminado_baja=0 AND
      p.es_spam=0 AND
      c.id_agregado=31436 AND
      c.activo=1
)
UNION DISTINCT
(SELECT p.id_post, p.id_usuario,
p.id_tipo_envio_post, p.texto, p.tipo,
p.num_comentarios, p.fecha_publicacion, 
p.priv, p.vidupl_file, p.vidupl_img, p.vidmov_file,
p.vidmov_img, p.vidcam_file, p.vidcam_img,
p.vid_id_youtube, p.vid_tit_youtube,
p.vid_thumb_youtube, p.vid_time_youtube,
p.mus_id_youtube, p.mus_tit_youtube,
p.mus_time_youtube, p.img_fichero,
p.link_tit, p.link_url, p.link_texto, p.link_img,
p.evento_tit, p.evento_categoria, p.evento_tipo,
p.evento_fecha_inicio, p.evento_fecha_fin,
p.evento_telefono_contacto, p.evento_email,
p.evento_pagina_web, p.evento_img_site,
p.evento_img_site_size, p.map_direccion,
p.evento_cancelado, p.map_latitud,
p.map_longitud, p.map_zoom, p.map_id_pais
FROM POSTS p
WHERE  
      p.id_usuario=31436 AND
      (p.priv=0 OR p.priv=1) AND
      p.eliminado=0 AND
      p.eliminado_baja=0 AND
      p.es_spam=0
)
ORDER BY id_post DESC

Newsletter de STR Sistemas

Suscríbete a nuestra newsletter para recibir contenido interesante del mundo DevOps y artículos escritos por nuestros técnicos

¡Usamos cookies propias y de terceros para mejorar tu experiencia en esta web! Si sigues navegando, consientes y aceptas estas cookies en tu ordenador, móvil o tablet.

Más información sobre las cookies y cómo cambiar su configuración en tu navegador aquí.

x