De l'Union en tant que sous-requête MySQL

Je suis désireux d'optimiser une requête à l'aide d'un syndicat en tant que sous-requête. Je ne suis pas vraiment sûr de savoir comment construire la requête. Je suis de l'utilisation de MYSQL 5

Voici l'original de la requête:

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 

Ce que je veux faire est de remplacer cette ( (Parts_Category.category_id = '508' OR Parts_Category.main_category_id ='508' ) partie avec l'union ci-dessous. De cette façon, je peux laisser la clause GROUP BY et utiliser directement le col des indices qui devrait améliorer les performances. Des pièces et des pièces de la catégorie tables contient un demi-million de dossiers de chacun, donc un gain serait génial.

(
    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
)

Quelqu'un peut-il me donner un indice sur la façon de le ré-écrire? J'ai essayé pendant des heures mais ne peut pas le faire comme je ne suis relativement nouveau pour MySQL.

OriginalL'auteur gus | 2009-07-21