Anzeige - [Interessiert an einer Anzeige?]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
> MySQL-Abfrage: Mit oder ohne "JOIN"
cr4m0
Geschrieben am: So 9.03.2008, 17:56
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 178
Mitglied seit: 30.07.2007


Ich habe zwei Tabellen, die so aufgebaut sind:
--------------------
fotos:
id, url, user

users:
id, name
--------------------
Ich möchte jetzt Fotos aus der ersten Tabelle ausgeben und dabei den Namen des Users anzeigen. Dieser ist jedoch nur in der zweiten Tabelle vorhanden. Welche der drei Möglichkeiten ist für diese Abfrage die schnellste und bei welcher ist die Datenbank-Belastung am geringsten? Danke für die Hilfe im Voraus!
--------------------
$a1 = "SELECT url, user FROM fotos";
$a2 = mysql_query($a1);
while ($a3 = mysql_fetch_object($a2)) {
$b1 = "SELECT name FROM com_users WHERE id = ".$a3->user;
$b2 = mysql_query($b1);
$b3 = mysql_fetch_object($b2);
// In $a3 sind jetzt die Foto-Daten und in $b3 die User-Daten
}
--------------------
$a1 = "SELECT url, name FROM fotos, users WHERE fotos.user = users.id";
$a2 = mysql_query($a1);
$a3 = mysql_fetch_object($a2);
// In $a3 sind jetzt alle Daten
--------------------
$a1 = "SELECT url, name FROM fotos JOIN users ON fotos.user = users.id";
$a2 = mysql_query($a1);
$a3 = mysql_fetch_object($a2);
// In $a3 sind jetzt alle Daten
Top
PMEmail Poster
Top
 
 
Sven K
#2 Geschrieben am: So 9.03.2008, 18:06 (+00:10)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 136
Mitglied seit: 27.10.2006


pack alles in eine for schleife die 100000 durchgänge macht und stop die zeit. mach das mit allen 3 möglichkeiten.

ich tippe allerdings auf den join smile.gif


--------------------
idiot confusion device | Computer Forum
Top
PMEmail Poster
Top
 
cr4m0
#3 Geschrieben am: So 9.03.2008, 18:11 (+00:04)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 178
Mitglied seit: 30.07.2007


OK, danke schonmal!

Also rein logisch müsste die erste Methode ja die langsamste sein. Denn da werden erst einmal die Foto-Daten ausgelesen, dann für jedes Foto noch einmal extra die User-Daten. Bei 100 Fotos sind das 101 Abfragen. Stimmt das so?

Bei den Methoden 2 und 3 gibt es bei 100 Fotos nur 1 Abfrage, oder? Dann müssten die letzten beiden Methoden ja eindeutig schneller sein...
Aber wo ist überhaupt der Unterschied zwischen den Methoden 2 und 3? Gibt es überhaupt welche bei Geschwindigkeit und Last für die Datenbank?
Top
PMEmail Poster
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#4 Geschrieben am: So 9.03.2008, 19:13 (+01:02)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2206
Mitglied seit: 4.02.2006


Jeder Kontextwechsel zwischen der Wirtssprache (hier: PHP) und dem Datenbank-Prozeß ist aufwendig.

Damit ist die erste Lösung sehr schlecht, weil sie bei 100 Fotos 101 Kontextwechsel erfordert.

Die Lösungen 2 und 3 sollten normalerweise von einem Optimierer als identisch erkannt und auf denselben Ablaufplan abgebildet werden.

Unter dem Gesichtspunkt der Lesbarkeit (und um bei komplexeren Abfragen zwischen Verknüpfungen und eigentlichen Where-Kriterien zu unterscheiden) ziehe ich es allerdings vor, grundsätzlich Joins zu verwenden und die Komma-Kombination auf jene Fälle zu beschränken, in denen man tatsächlich jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle kombinieren möchte.

Bei komplexeren Abfragen werden üblicherweise erst die Where-Bedingungen ausgewertet, um die Einzeltabellen möglichst zu verkleinern. Erst auf die kleinen Ergebnisse wird Join angewandt.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
cr4m0
#5 Geschrieben am: So 9.03.2008, 21:35 (+02:22)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 178
Mitglied seit: 30.07.2007


Super, danke. Jetzt weiß ich schonmal, dass die letzten beiden Methoden besser sind. Ich habe jetzt mein komplettes System auf die Joins umgestelt.
Ich hatte auch mal was von Left- und Right-Joins gelesen. Was ist das denn dann genau? Die Dokumentation von MySQL dazu hab ich nicht verstanden.

QUOTE
Bei komplexeren Abfragen werden üblicherweise erst die Where-Bedingungen ausgewertet, um die Einzeltabellen möglichst zu verkleinern. Erst auf die kleinen Ergebnisse wird Join angewandt.

OK, wie soll das denn genau aussehen in der Abfrage? Kannst du bitte mal ein Beispiel schreiben?
Top
PMEmail Poster
Top
 
jAuer
Jürgen Auer - freiberufl. Programmierer
#6 Geschrieben am: So 9.03.2008, 22:15 (+00:40)
Report PostQuote Post

AyomRank 9
Group Icon

Gruppe: Experten Entwicklung
Beiträge: 2206
Mitglied seit: 4.02.2006


QUOTE (cr4m0 @ So 9.03.2008, 21:35)
QUOTE
Bei komplexeren Abfragen werden üblicherweise erst die Where-Bedingungen ausgewertet, um die Einzeltabellen möglichst zu verkleinern. Erst auf die kleinen Ergebnisse wird Join angewandt.

OK, wie soll das denn genau aussehen in der Abfrage? Kannst du bitte mal ein Beispiel schreiben?

Das machst nicht Du, sondern das macht normalerweise der Optimierer innerhalb der Datenbank-Software.

Stell dir vor, Du kombinierst zwei Tabellen mit jeweils zehntausend Zeilen. Dann wäre es unsinnig, zunächst alle Zeilen miteinander zu kombinieren und dann über die Where-Bedingungen die meisten wieder rauszuschmeißen.

Stattdessen sucht der Optimierer erst nach jenen Where-Bedingungen, die über Konstanten laufen. Damit verkleinern sich die Tabellen, die anschließend gejoint werden.


--------------------
Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.

server-daten: Web-Datenbanken als Online - CRM - Lösung.
Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten.
Top
PMEmail PosterUsers Website
Top
 
cr4m0
#7 Geschrieben am: Mo 10.03.2008, 16:16 (+18:01)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 178
Mitglied seit: 30.07.2007


Achso biggrin.gif
Danke, jetzt habe ich mein Script - denke ich - gut optimiert. Das mit den JOINS ist ja auch ganz einfach.
Top
PMEmail Poster
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/23367

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
PHP/MySQL Entwickler für Projekt gesucht BigRed 64 0 Fr 5.09.2008, 12:05
Webmaster - Gleichwertige oder verwandte Begriffe lingxmedia 78 3 Fr 29.08.2008, 14:27
CMS oder HTML für Contentseite? selfbusiness 307 10 Fr 29.08.2008, 05:11
Paypal EURO Konto oder CHF Konto? fgoify 213 4 Mo 25.08.2008, 21:01
[MYSQL] ø bei Suche nach o finden MarkusH 99 1 Mi 20.08.2008, 09:10
Suche PHP/MYSQL Programmierer Paidunion 143 0 So 17.08.2008, 12:56
Genügsamkeit oder Habsucht - was macht glücklich? miguelrego 418 20 Sa 16.08.2008, 20:00
CMS oder selberschreiben Sancheck 298 8 Sa 16.08.2008, 06:53
Suche kleinere Jobs (HTML, PHP, MySQL...) Oliver Pester 243 2 Do 14.08.2008, 14:08
Handy ohne Schufa PPs Toblerone 334 7 Do 14.08.2008, 02:21




Anzeige - [Interessiert an einer Anzeige?]



Anzeigen


[Interessiert an einer Anzeige?]