Autor
|
Thema: [sql] cross join vs. inner join
|
a.XL
   
Usernummer # 10634
|
verfasst
hallo,
fallst hier gerade ein datenbank-experte unterwegs sein sollte. intuitiv habe ich das gefühl, dass die abfrage
code:
SELECT * FROM t1, t2 WHERE t1.id=t2.xyz_id AND t2.x=7
langsamer sein müßte als
code:
SELECT * FROM t1 INNER JOIN t2 ON (t2.x=7 AND t1.id=t2.xyz_id)
wobei hier also t2.xyz_id ein fremdschlüssel ist, der mit t1.id verknüpft ist.
die frage hängt natürlich von der datenbank und der implementierung der abfragaroutinen ab. aber rein der idee nach wird bei der ersten abfrage erst das kreuzprodukt erzeugt und dann aus gemäß diesem where-klausel ausgewählt. bei der zweiten abfrage wird jedoch direkt nur eine auswahl des kreuzprodukts erzeugt. durch die verschiebung eines teils der where-klausel der gesamtabfrage in die join-bedingung (on) müßte man so doch eine menge performance sparen können. oder???
hat jemand eine begründete meinung dazu?
gruß axel
Aus: Bochum | Registriert: Sep 2003
| IP: [logged]
| |
|
|
philipp
Usernummer # 687
|
verfasst
Ich habe meinen Datenbankprof damals das selbe gefragt, denn ich kannte vorher nur die erste Variante (bzw. hatte mich mit Joins noch nicht beschäftigt). Im Prinzip hast du Recht, alle Datenbanken optimieren aber ihre Operatorbäume zumindest so gut dass so einfache Abfragen wie deine gleich schnell sein werden, weil sie den gleichen optimierten Operatorbaum ergeben. Wie auch bei Compilern lohnt es sich bei DB-Anfragen kaum, von Hand zu optimieren.
Aus: Essen | Registriert: Jul 2000
| IP: [logged]
| |
|
|
|
a.XL
   
Usernummer # 10634
|
verfasst
danke, das habe ich mir schon fast gedacht. sehr interessanter link. mittlerweile ärgere ich mich, dass ich in meinem informatik-nebenfach-studium keine datenbankvorlesung besucht habe, sondern mich mit formaler logik beschäftigt habe... irgendwie fand ich datenbanken nie so aufregend: zweidimensionale matrizen. gähn.
optimiert mysql wohl auch?
Aus: Bochum | Registriert: Sep 2003
| IP: [logged]
| |
|
|
philipp
Usernummer # 687
|
verfasst
mysql optimiert mit ziemlicher Sicherheit. Ich hab die Vorlesung eigentlich auch "nur" besucht um meine schon aus der Praxis vorhandenen Kenntnisse zu vervollständigen, hat sich schon gelohnt. Arbeite doch einfach mal die PDFs durch, ist nicht besonders schwer.
Aus: Essen | Registriert: Jul 2000
| IP: [logged]
| |
|
|
a.XL
   
Usernummer # 10634
|
verfasst
kostet aber zeit.
als pragmatiker ist es sicher wichtiger, sql zu beherrschen. wenn die datenbank das dann sowieso optimiert, umso besser.
Aus: Bochum | Registriert: Sep 2003
| IP: [logged]
| |
|
|
philipp
Usernummer # 687
|
verfasst
Das ist 'ne schöne Feierabendlektüre Will dich aber zu nix zwingen!
Aus: Essen | Registriert: Jul 2000
| IP: [logged]
| |
|
|
harryp
  
Usernummer # 5896
|
verfasst
Zitat: Ursprünglich geschrieben von: a.XL: kostet aber zeit.
als pragmatiker ist es sicher wichtiger, sql zu beherrschen. wenn die datenbank das dann sowieso optimiert, umso besser.
Manchmal muß man den Optimizer allerdings überreden, einen anderen Weg zu wählen und ihn ein bißchen "überreden". Zumindest ist das bei DB2 für Z/OS so. Mit dem Explain - Befehl kannst man hier die SQL-Abfrage analysieren. Keine Ahnung, ob das bei MySQL geht.
@phillip Danke für den Link. Der ist klasse.
Aus: Kölle | Registriert: May 2002
| IP: [logged]
| |
|
|