Mysql
 sql >> Base de données >  >> RDS >> Mysql

Améliorer la requête MySQL avec la sous-requête IN

MySQL impossible de permuter la table principale et la table pilotée dans le IN clause. Cela va être corrigé dans 6.0 .

Pour l'instant, vous pouvez le réécrire comme ceci (nécessite un JOIN ):

SELECT  i.*
FROM    (
        SELECT  DISTINCT item_id
        FROM    item_attributes a
        WHERE   a.attribute_name = 'SomeAttribute'
                AND a.attribute_value = 'SomeValue'
        ) ai
JOIN    items i
ON      i.id = ai.item_id

Puisque vous utilisez le EAV modèle, vous voudrez peut-être créer un index unique sur (attribute_name, item_id) auquel cas vous pouvez utiliser une jointure simple :

SELECT  i.*
FROM    item_attributes ai
JOIN    items i
ON      i.id = ai.item_id
WHERE   a.attribute_value = 'SomeValue'
        AND a.attribute_name = 'SomeAttribute'