Ist ein JOIN schneller als ein WO?

Angenommen ich habe zwei Tabellen, die miteinander verknüpft sind (ein Fremdschlüssel auf die andere) :

CREATE TABLE Document (
  Id INT PRIMARY KEY,
  Name VARCHAR 255
)

CREATE TABLE DocumentStats (
  Id INT PRIMARY KEY,
  DocumentId INT, -- this is a foreign key to table Document
  NbViews INT
)

Ich weiß, dies ist nicht der intelligenteste Weg, Dinge zu tun, aber dies ist das beste Beispiel, das ich kommen konnte mit.

Nun möchte ich, um alle Dokumente mit mehr als 500 views. Die zwei Lösungen, die mir einfallen, sind :

SELECT *
FROM Document, DocumentStats
WHERE DocumentStats.Id = Document.Id
  AND DocumentStats.NbViews > 500

oder :

SELECT *
FROM Document
INNER JOIN DocumentStats
ON Document.Id = DocumentStats.Id
WHERE DocumentStats.NbViews > 500

Sind beide Abfragen gleichwertig, oder gibt es eine Möglichkeit, die ist weit besser als die anderen ? Wenn ja, warum ?

Ich bin mir bewusst, dass mein Beispiel nicht perfekt ist, und dass die Abfragen können müssen einige tune-up, aber ich hoffe, du hast den Punkt 😉 !

EDIT: wie gewünscht die Antworten, diese Frage richtete sich an MSSQL, aber ich wäre daran interessiert zu wissen, wenn es anders ist bei anderen DB-engines (MySQL, etc...)

InformationsquelleAutor der Frage Wookai | 2009-07-15

Schreibe einen Kommentar