MySQL - Optimizacion consulta

 
Vista:

Optimizacion consulta

Publicado por Gabriel yruc (3 intervenciones) el 24/05/2022 21:35:54
Hola gente del foro, estoy con un problema de lentitud, a ver si me pueden dar una mano
Tengo un grupo de 50 personas mas o menos, a las que una por una debo consultar que cierto campo de una tabla sea igual a una info. La búsqueda en esa tabla tiene que coincidir con dos campos, uno varchar y el otro int. El problema radica en que la búsqueda de esas 50 personas las termina a los 40 segundos. Le cree un índice compuest de los dos campos (el de varchar y el de int) pero no veo ninguna mejora. Mi query sería la siguiente:
Select * from sesiones where grupo_sesiones = 'dato1' and fecha_sesion = dato2;
Grupo_sesiones sería varchar y fecha_sesion sería int
Esta consulta la haría más o menos 50 veces. Como puedo optimizar para que no tarde tanto ??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ivan

Optimizacion consulta

Publicado por Ivan (37 intervenciones) el 25/05/2022 19:12:46
Hola,

una consulta de 50 registros no puede tardar 40 segundos. Hay algo que está mal, es evidente.
Hacer un índice compuesto, no creo que sea una solución, tampoco.
Lo normal es hacer un índice (individual) en cada campo que requiera una búsqueda rápida.

Para saber mejor porque tarda tanto tu consulta añade el comando explain al inicio de la consulta y estudia sus resultados.

Aquí https://www.adictosaltrabajo.com/2015/09/18/uso-de-la-sentencia-explain-en-mysql/ tienes una buena explicación de lo que significan y sus posibles soluciones.

Espero que te ayude.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Optimizacion consulta

Publicado por Gabriel (3 intervenciones) el 26/05/2022 15:05:11
Antes que nada gracias Ivan por interesarte en mi problema.
Quizás me explique mal, no es una consulta de 50 registros, es una consulta por cada uno de esos 50 registros, osea, hace 50 consultas y esas 50 consultas me tarda 40 segundos. Tampoco es una query compleja ya que sólo consulta sobre dos campos, por eso cree un índice compuesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ivan

Optimizacion consulta

Publicado por Ivan (37 intervenciones) el 26/05/2022 18:00:08
Hola,

seguir hablando sobre tu consulta sin aportar más datos es hacer suposiciones. Tu consulta debería resolverse en milésimas, igual que otras consultas con cientos de miles de registros, siempre y cuando las relaciones entre tablas esten bién hechas y los índices correctos.

Sería interesante para seguir avanzando que pusieras los resultados del explain, sobretodo los de la columna row, y si busca en todas las filas significa que debes poner un índice en ese campo.

No hay que poner un índice compuesto sólo porque compares dos campos, con poner "index" en cada campo ya es suficiente y el motor de Msql se encarga del resto, es muy potente y está muy optimizado, pero la estructura de la BD debe estar bién hecha, sinó, tarda mucho y suele ser la señal de que algo falla.

PD:
Hay ocasiones, cuando haces un backup y restauras la BD, según el programa que uses, que para agilizar el copiado de datos "desactiva" los índices para no recalcularlos en cada registro copiado y copiar más rápido.
El problema es que después se quedan todos los índices "apagados" con lo que las consultas son sín índices y se colapsa todo. A mi me pasó una vez y no entendía nada hasta que utilicé los comandos:

Para ver si los índices estan activos/inactivos, en la columna Comment te saldrá disabled
1
SHOW INDEXES FROM  $tabla

Para activar los índices escribes esto y en Comment no saldrá nada
1
ALTER TABLE $tabla ENABLE KEYS

Ya me dices algo con más datos que se puedan evaluar.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar