2009-04-27 8 views
1

Nachdem auf einer Abfrage ERKLÄREN Durchführung:mysql erklären in einer Union-Abfrage

explain 
select name from t1 where name like '%smthing%' 
UNION ALL 
select name from t2 where name like '%smthing%' 
UNION ALL 
select name from t3 where name like '%smthing%' 
UNION ALL 
select name from t4 where name like '%smthing%' 

durch die Vereinigung von 4 Tischen ich dieses:

id select_type table   type possible_keys key  key_len ref   rows Extra     
1 PRIMARY  t1    index (NULL)   name 152  (NULL)  337 Using where; Using index 
2 UNION   t2    index (NULL)   name 152  (NULL) 3842 Using where; Using index 
3 UNION   t3    index (NULL)   name 452  (NULL)  204 Using where; Using index 
4 UNION   t4    index (NULL)   name 452  (NULL) 8269 Using where; Using index 
(NULL) UNION RESULT <union1,2,3,4> ALL  (NULL)   (NULL) (NULL) (NULL) (NULL) 

Wenn jede Komponente der Vereinigung erklärt, Die Typen sind "INDEX", der Typ der Vereinigung lautet jedoch "ALL". Was ist der Grund für dieses Verhalten? Danke

+0

Vielleicht können Sie Ihre Abfrage einfügen, und das Ergebnis des Plans erklären in der Frage? – Avi

Antwort

2

Versuchen Sie, UNION ALL anstelle von UNION zu verwenden - sonst versucht MySQL, doppelte Zeilen zu entfernen (vermutlich minus Tabellenunsicherheiten, da es sich um die Ergebnismenge handelt).

Haben Sie auch eine ORDER BY- oder WHERE-Klausel für das Ergebnis der UNION? Dies geschieht wiederum auf der Ergebnismenge und nicht auf Tabellenebene.