What's new

Bienvenido!

Al registrarse con nosotros, podrá discutir, compartir y enviar mensajes privados con otros miembros de nuestra comunidad.

Registrar cuenta Discord Nosetu Games

Juegos: Argentum Online Forever, Kicks Online 3, Narcs, Revival AO y más...

AYUDA ¿Cómo optimizar una consulta SQL compleja en una base de datos con millones de registros?

AYUDA

Bakko

New member
Joined
Nov 9, 2024
Messages
1
Hola a todos,

Tengo una base de datos con más de 10 millones de registros en una tabla principal llamada Transacciones. Estoy intentando optimizar una consulta que realiza varias uniones y filtros, pero la ejecución toma mucho tiempo, alrededor de 20-30 segundos en un servidor decente.

La consulta que tengo actualmente es algo como esto:

SELECT t1.transaccion_id, t1.fecha, t1.monto, t2.nombre_cliente, t3.descripcion_producto FROM Transacciones t1 JOIN Clientes t2 ON t1.cliente_id = t2.cliente_id JOIN Productos t3 ON t1.producto_id = t3.producto_id WHERE t1.fecha BETWEEN '2023-01-01' AND '2023-12-31' AND t2.categoria = 'VIP' AND t3.tipo = 'Electrónica' ORDER BY t1.fecha DESC;


Ya tengo índices en Transacciones(cliente_id, producto_id, fecha), Clientes(cliente_id, categoria), y Productos(producto_id, tipo). Sin embargo, parece que no están ayudando mucho. ¿Algún consejo sobre cómo mejorar esta consulta o algún ajuste de índice adicional que debería considerar? Agradecería cualquier ayuda para reducir el tiempo de ejecución. ¡Gracias de antemano!
 

Nople

New member
Joined
Nov 10, 2024
Messages
1
Primero, revisa el orden de tus índices y asegúrate de que estén optimizados para esta consulta específica. En Clientes, el índice debe ser (categoria, cliente_id), y en Productos, (tipo, producto_id). Así se filtra primero por las condiciones de categoria y tipo, antes de pasar al JOIN.

También te recomiendo un índice compuesto en Transacciones: (fecha, cliente_id, producto_id). Este orden ayuda a que el optimizador use fecha en el filtro inicial y luego los otros campos en los JOIN.

Ejecuta la consulta con EXPLAIN para confirmar que el optimizador esté usando estos índices. Si no, ajusta el orden de los JOIN o del WHERE.

Y despues vas a tener que onsiderar denormalizar algunos datos en Transacciones si la consulta es muy frecuente. Esto reducirá los JOIN y probablemente el tiempo de ejecución.
 
Top