Hola,
Por un lado, he creado dos indices más en table2 y table3, que corresponden a los campos prtx__ref y prt__name a ver si eso ayuda, pero sigue siendo muy lenta.
También he estado probando diferentes combinaciones de subconsultas y esta es la que me da mejor resultado:
Código MySQL:
Ver originalSELECT typex.
*, listM.prtc__col_name
as colM
, listM.
value as valueM
, langs.prtc__col_name
AS '__colName__', langs.malg__code
AS '__code__',langs.
TEXT AS '_text_' FROM table1
WHERE ref
IN ('0010021','0010022','0010023') INNER JOIN table2
AS langs
ON langs.prtx__ref
= typex.ref
AND langs.prt__name
= 'gafas' LEFT JOIN table3
AS listM
ON listM.prtx__ref
= typex.ref
AND listM.prt__name
= 'gafas'
Ejecutando la consulta que tenía al principio en el MySQL Query Browser el tiempo de ejecución que me pone es de entre 14-16 segundos y con la modificación que he hecho es entre 8-9 segundos, una gran mejora sin duda (aunque no la suficiente)
Pero en cambio al llamar a la función php que ejecuta esa consulta, el tiempo con la primera consulta era de 18 segundos y con la que acabo de poner me peta por tiempo de ejecución.
La verdad es que no le veo el sentido.
Por otro lado, el número total de registros de table1 es de 2735 y en la consulta que me da problemas todas estas las referencias estan en el "where in". Por cada registro de esta tabla hay 9 registros de table2 (campos con idioma), y en la table3 puede o no corresponder con 6 registros, lo que hace un total de 154084 registros.
La verdad es que ya no se que más probar, estoy planteandome hacer las 3 consultas por separado pero creo que eso en lugar de mejorar el tiempo de ejucción lo empeoraria ¿no?
He probado también cambiar el tipo de dato de los indices , puesto que lo tenía en VARCHAR y he leído que con CHAR es son más optimas las consultas pero he reducido sólo 1 segundo