Estoy queriendo optimizar una consulta utilizando una unión como una sub consulta. Aunque no estoy seguro de cómo construir la consulta. Estoy usando MySQL 5Union as sub query MySQL
Ésta es la consulta inicial:
SELECT Parts.id
FROM Parts_Category, Parts
LEFT JOIN Image ON Parts.image_id = Image.id
WHERE
(
(
Parts_Category.category_id = '508' OR
Parts_Category.main_category_id ='508'
) AND
Parts.id = Parts_Category.Parts_id
) AND
Parts.status = 'A'
GROUP BY
Parts.id
Lo que quiero hacer es reemplazar esta parte ((Parts_Category.category_id = '508' OR Parts_Category.main_category_id ='508')
con el sindicato a continuación. De esta forma, puedo descartar la cláusula GROUP BY y usar índices de columnas rectas que deberían mejorar el rendimiento. Las tablas de categorías de piezas y partes contienen medio millón de registros cada una, por lo que cualquier ganancia sería excelente.
(
SELECT * FROM
(
(SELECT Parts_id FROM Parts_Category WHERE category_id = '508')
UNION
(SELECT Parts_id FROM Parts_Category WHERE main_category_id = '508')
)
as Parts_id
)
¿Alguien puede darme una pista sobre cómo volver a escribirlo? Lo intenté durante horas, pero no puedo conseguirlo, ya que solo soy bastante nuevo en MySQL.
, gracias nunca tanto Quassnoi. FY1 en una categoría de 62,000 filas ¡la consulta regresa alrededor de 1 segundo más rápido! – gus
Creo que en su segundo ejemplo, tendría que agregar un GROUP BY Parts.id ya que no quiero los duplicados donde una parte puede aparecer en otras categorías. Esa fue la idea detrás de usar Union. Voy a comparar el rendimiento de todos modos. Gracias de nuevo. – gus
GROUP BY fue necesario en el segundo ejemplo y si se agrega, me sale el mismo problema - filesort y usando temp de Explain. – gus