MySQL 5.5.8:
Frage 1:
Gibt es einen Unterschied in den folgenden Aussagen und wenn ja, welche Leistung wird bevorzugt? Kann dies auch beantwortet werden, ohne die Zeilenanzahl der Tabellen vor und nach der where-Klausel und die mögliche Indexverwendung zu kennen?
SELECT *
FROM a JOIN b ON a.id = b.id AND a.col2 BETWEEN 1 AND 5;
SELECT *
FROM a JOIN b ON a.id = b.id
WHERE a.col2 BETWEEN 1 AND 5;
Mein Grund für die Frage ist, dass wenn beispielsweise die Tabellen massiv sind, die where-Klausel jedoch 99,9999% der Datensätze herausfiltert, ich keine Zeit damit verschwenden möchte, massive Tabellen zu verbinden, wenn nach dem Join 99,9999% der Datensätze nicht verwendet werden.
Frage 2:
Nehmen Sie die gleiche Situation, welche Aussage (wenn es einen Unterschied gibt) weniger IOPS erfordert. (Index auf b.id und einer auf a.col2 vorhanden)