2010-11-12 37 views
2

Comme son nom l'indique, une requête avec multiple ou sera plus rapide ou une requête avec requête multiple jointe à union sera plus rapide? J'ai joint seulement deux tables pour le rendre simple mais il peut y avoir plus de tables dans la jointure.requête avec multiple ou vs union multiples requêtes, laquelle sera plus rapide?

par exemple,

select isbn, booktitle from book as b left join publisher as p 
     on b.publisherid = p.publisherid 
     where 
      booktitle like '%mysql%' or 
      isbn like '%mysql%' or 
      publishername like '%mysql%' 

vs

 select isbn, booktitle from book as b left join publisher as p 
    on b.publisherid = p.publisherid 
    where 
    booktitle like '%mysql%' 
    union 
    select isbn, booktitle from book as b left join publisher as p 
    on b.publisherid = p.publisherid 
    where 
    isbn like '%mysql%' 
    union 
    select isbn, booktitle from book as b left join publisher as p 
    on b.publisherid = p.publisherid 
    where 
    publishername like '%mysql%' 
+0

Pourquoi ne pas essayer vous-même et savoir, et vous pouvez nous demander « Je trouve que la première requête exécutée en la moitié du temps de la seconde Quelqu'un peut-il expliquer s'il vous plaît? " –

+0

Si votre champ ISBN a "mysql" partout, alors vous avez quelques problèmes de données assez mauvais. –

Répondre

0

Je ne vois pas comment serait plus rapide de votre syndicat. Vous devez numériser et rejoindre 3 fois, alors que dans le premier cas, vous numérisez une seule fois et pour chaque enregistrement joint, vous pouvez appliquer les critères.

0

Le premier sera plus efficace puisque vous interrogez les données une seule fois. Cela dit, si vous interrogez des données, vous ne retournerez pas, il est même préférable de mettre ces critères dans une clause IN dans le WHERE. Dans votre exemple fourni, il ressemblerait à ceci:

SELECT isbn, booktitle 
FROM book as b 
WHERE 
    booktitle LIKE '%mysql%' or 
    isbn like '%mysql%' or 
    b.publisherid in (SELECT publisherid FROM publisher WHERE publishername like '%mysql%') 

avec des index appropriés sur les colonnes de filtrage (de PUBLISHERNAME, dans ce cas), MySQL optimisera chaque pièce et les combiner beaucoup plus efficacement.