Wenn Sie sie in einer Form schreiben, in der sie die gleichen Ergebnisse liefern, erwarten Sie, dass der Abfrageanalysator Ihnen identische * Abfragepläne gibt. Das heißt JOIN nicht ,
, weil ,
viel weniger klar ist, und ist seit Jahrzehnten
veraltet Wenn Sie die Leistung von zwei verschiedenen Abfragen vergleichen wollen, ist die einfachste Methode, sowohl zu laufen und vergleichen, wie lange sie nahm an, obwohl sie überprüfen, dass sie verschiedene Dinge tun, indem sie die Abfragepläne vergleichen (EXPLAIN query text here
in mysql gibt Ihnen den Plan für eine Frage)
Merken Sie, dass das Sagen "ich weiß, dass sie unterschiedliche Resultate geben, aber ich will das schnellere" ist nie eine vernünftige Sache in der Programmierung zu sagen. Sie sollten immer genau wissen, welche Ergebnisse Sie wollen.
I.e.
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
hat die gleiche Bedeutung wie
select table1.a ,table2.b from table1 join table2 on table1.id=table2.id
und
select table1.a ,table2.b from table1 left join table2 on table1.id=table2.id
hat die gleiche Bedeutung wie
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
union
select table1.a , null from table1 where table1.id not in (select table2.id from table2)
und die Formen verbinden, die Sie nicht verwenden:
select table1.a ,table2.b from table1 right join table2 on table1.id=table2.id
hat die gleiche Bedeutung wie
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
union
select null, table2.b from table2 where table2.id not in (select table1.id from table1)
Und
select table1.a ,table2.b from table1 full join table2 on table1.id=table2.id
hat die gleiche Bedeutung wie
select table1.a ,table2.b from table1 ,table2 where table1.id=table2.id
union
select table1.a , null from table1 where table1.id not in (select table2.id from table2)
union
select null, table2.b from table2 where table2.id not in (select table1.id from table1)
ich die Frage nicht verstehen. Kannst du bitte etwas ausarbeiten? – 0xCAFEBABE
Die beiden sind nicht gleichwertig. 'LEFT JOIN' gibt' table1' Zeilen zurück, die keine übereinstimmende 'table2' Zeile haben, kartesische Produkte geben diese Zeilen nicht zurück. – Barmar
@ 0xCAFEBABE Verwenden Sie die obigen zwei Möglichkeiten, um die gleichen Daten abzufragen, aber ich würde gerne wissen, in welchem Fall die Verwendung dieser Art die Leistung wird besser – lpgad