Acelerar una consulta mysql y php
Estoy programando en php y mysql y tengo una consulta bastante pesada.
Dicha consulta se realiza sobre una tabla con más de 100.000 registros y debe devolver las líneas que cumplan:
- Encontrarse entre dos fechas y tener un cierto valor en el campo clase (salen unos 15.000 registros)
Y ahora viene lo pesado: comprobar cuales de esos 15.000 registros coinciden con alguno de entre ellos mismos en 3 campos pero no en el código.
Ahora mismo está funcionando realizando un cruce de esa tabla consigo misma, haciendo un where delimitado por fechas y clase y pidiendo que 1.c1=2.c1, 1.c2=2.c2 y 1.c3=2.c3 pero 1.c4<>2.c4 (siendo c1-4 los campos correspondientes y 1 y 2 los alias de la tabla).
He indexado esos campos consiguiendo algo más de velocidad y he probado a crear una tabla temporal con los 15.000 registros y hacer el cruce después, pero sigue siendo demasiado lenta.
¿Alguna idea de como acelerarlo?
Muchas gracias.
PD: se me había ocurrido realizar miles de pequeñas consultas, una por cada línea extraída de los 15.000 registros, pero creo que va a ser aún más lento.
Dicha consulta se realiza sobre una tabla con más de 100.000 registros y debe devolver las líneas que cumplan:
- Encontrarse entre dos fechas y tener un cierto valor en el campo clase (salen unos 15.000 registros)
Y ahora viene lo pesado: comprobar cuales de esos 15.000 registros coinciden con alguno de entre ellos mismos en 3 campos pero no en el código.
Ahora mismo está funcionando realizando un cruce de esa tabla consigo misma, haciendo un where delimitado por fechas y clase y pidiendo que 1.c1=2.c1, 1.c2=2.c2 y 1.c3=2.c3 pero 1.c4<>2.c4 (siendo c1-4 los campos correspondientes y 1 y 2 los alias de la tabla).
He indexado esos campos consiguiendo algo más de velocidad y he probado a crear una tabla temporal con los 15.000 registros y hacer el cruce después, pero sigue siendo demasiado lenta.
¿Alguna idea de como acelerarlo?
Muchas gracias.
PD: se me había ocurrido realizar miles de pequeñas consultas, una por cada línea extraída de los 15.000 registros, pero creo que va a ser aún más lento.
Respuesta
1