Du bist nicht eingeloggt! Möglicherweise kannst du deswegen nicht alles sehen.
  (Noch kein mods.de-Account? / Passwort vergessen?)
Zur Übersichtsseite
Hallo anonymer User.
Bitte logge dich ein
oder registriere dich!
 Moderiert von: Che Guevara


 Thema: Gehirnsalat ( wir unter uns )
« erste « vorherige 1 ... 639 640 641 642 [643] 644 645 646 647 ... 6582 nächste » letzte »
erste ungelesene Seite | letzter Beitrag 
TriggerTG

TriggerTG
Schönen guten Morgen
30.05.2007 11:47:49  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
 
Zitat von Achse-des-boesen

 
Zitat von GH@NDI

Da kommst du an einem fiesen Subselect nicht drumherum Breites Grinsen


Zwei Joins?
Ich habe hier zumindest in meinem Notizblock einen Query stehen der 3 Joins über insgesamt 4 Tabellen hat und prima funktioniert.

/: Okay, 3 Lösungen...das schreit nach einen Vergleich ob und wie gut sie laufen Augenzwinkern




Deins ist ja schon durch die Definition falsch. Breites Grinsen

Er will alle Schüler die Fußball UND Schwimmen Breites Grinsen

Und mein Query tut nicht, verwirrender Weise. Denn

 
Code:
SELECT s.name, h1.hobby
FROM schueler s
	LEFT JOIN relation r ON r.schueler_ID = s.ID
	LEFT JOIN hobby h1 ON r.hobby_ID = h1.ID
WHERE 
3 IN (
	SELECT h.id
	FROM hobby h
		WHERE h.id = r.hobby_id
	) 
LIMIT 0 , 30

Gibt Sabine und Christian ja, die ja beide Schwimmen.

Und
 
Code:
SELECT s.name, h1.hobby
FROM schueler s
	LEFT JOIN relation r ON r.schueler_ID = s.ID
	LEFT JOIN hobby h1 ON r.hobby_ID = h1.ID
WHERE 
2 IN (
	SELECT h.id
	FROM hobby h
		WHERE h.id = r.hobby_id
	) 
LIMIT 0 , 30


gibt mir Sabine und SirSiggi aus die beide Fußball spielen.

Verknüpfe ich aber die beiden Subselects mit einem AND kommt niemand mehr raus Breites Grinsen
30.05.2007 11:55:32  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
http://www.myvideo.de/watch/1467803

:x
30.05.2007 11:55:39  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achse-des-boesen

Leet
 
Zitat von GH@NDI

Er will alle Schüler die Fußball UND Schwimmen Breites Grinsen

Oh peinlich/erstaunt
30.05.2007 12:03:40  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Haha!!! Breites Grinsen

 
Code:
SELECT s.name
FROM schueler s
	LEFT JOIN relation r ON r.schueler_ID = s.ID
WHERE 
2 IN (SELECT h.id	FROM hobby h, relation r2 WHERE r2.schueler_ID = s.ID AND h.id = r2.hobby_id) AND
3 IN (SELECT h.id	FROM hobby h, relation r2 WHERE r2.schueler_ID = s.ID AND h.id = r2.hobby_id)
GROUP BY s.name


Liefert mir die Sabine in 0.0006 Sekunden.
30.05.2007 12:08:15  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achse-des-boesen

Leet
 
Code:
SELECT Schueler.name 
FROM Schueler 
WHERE 
Schueler.ID IN (
 SELECT Relation.schuler_id FROM Relation JOIN Hobby ON Hobby.ID = Relation.hobby_id WHERE Hobby.hobby = 'Schwimmen'
)
AND
Schueler.ID IN (
 SELECT Relation.schuler_id FROM Relation JOIN Hobby ON Hobby.ID = Relation.hobby_id WHERE Hobby.hobby = 'Fußball'
);


/: Ja, ich suche nach dem Namen, aber da kann man natürlich auch die ID benutzen.
[Dieser Beitrag wurde 2 mal editiert; zum letzten Mal von Achse-des-boesen am 30.05.2007 12:27]
30.05.2007 12:20:59  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achse-des-boesen

Leet
Interessant, das von Ghandi scheint schneller:
My:
 
Code:
mysql> explain SELECT Schueler.name FROM Schueler WHERE Schueler.ID IN (SELECT Relation.schuler_id FROM Relation JOIN Hobby ON Hobby.ID = Relation.hobby_id WHERE Hobby.hobby = 'Schwimmen') AND Schueler.ID IN (SELECT Relation.schuler_id FROM Relation JOIN Hobby ON Hobby.ID = Relation.hobby_id WHERE Hobby.hobby = 'Fußball');
+----+--------------------+----------+------+---------------+------+---------+------+------+-------------+
| id | select_type        | table    | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+--------------------+----------+------+---------------+------+---------+------+------+-------------+
|  1 | PRIMARY            | Schueler | ALL  | NULL          | NULL | NULL    | NULL |    3 | Using where | 
|  3 | DEPENDENT SUBQUERY | Hobby    | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where | 
|  3 | DEPENDENT SUBQUERY | Relation | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where | 
|  2 | DEPENDENT SUBQUERY | Hobby    | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where | 
|  2 | DEPENDENT SUBQUERY | Relation | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where | 
+----+--------------------+----------+------+---------------+------+---------+------+------+-------------+
5 rows in set (0.01 sec)


Ghandis:
 
Code:
mysql> explain SELECT s.name FROM Schueler s LEFT JOIN Relation r ON r.schuler_id = s.ID WHERE 2 IN (SELECT h.id
 FROM Hobby h, Relation r2 WHERE r2.schuler_id = s.ID AND h.id = r2.hobby_id) AND 3 IN (SELECT h.id FROM Hobby h
, Relation r2 WHERE r2.schuler_id = s.ID AND h.id = r2.hobby_id) GROUP BY s.name;
+----+--------------------+-------+------+---------------+------+---------+------+------+-----------------------
-----------------------+
| id | select_type        | table | type | possible_keys | key  | key_len | ref  | rows | Extra                 
                       |
+----+--------------------+-------+------+---------------+------+---------+------+------+-----------------------
-----------------------+
|  1 | PRIMARY            | s     | ALL  | NULL          | NULL | NULL    | NULL |    3 | Using where; Using tem
porary; Using filesort | 
|  1 | PRIMARY            | r     | ALL  | NULL          | NULL | NULL    | NULL |    6 |                       
                       | 
|  3 | DEPENDENT SUBQUERY | h     | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where           
                       | 
|  3 | DEPENDENT SUBQUERY | r2    | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where           
                       | 
|  2 | DEPENDENT SUBQUERY | h     | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where           
                       | 
|  2 | DEPENDENT SUBQUERY | r2    | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where           
                       | 
+----+--------------------+-------+------+---------------+------+---------+------+------+-----------------------
-----------------------+
6 rows in set (0.00 sec)


Saltsam, dabei hat er sogar eine Tabelle mehr drin...
30.05.2007 12:30:26  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Das ergebnis bei Explain ist doch aber nicht die Ausführungszeit des erklärten Queries, sondern die Zeit die vergeht um das Query zu erklären? peinlich/erstaunt
30.05.2007 12:33:25  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achse-des-boesen

Leet
Stimmt, Explain gibt dir bloß eine detaillierte Übersicht.
Aber ich wunder mich immernoch warum dein mehrfaches Where so viel schneller ist als mein Join. Ich vermute zwar, dass sich das Problem auslöst, sobald ich die ID-Splaten als Index definiere, aber trotzdem, wenn man sich das Explain bei dir anschaut und dann mal in die Mysql-Doku guckt:

Using filesort - MySQL muss einen zusätzlichen Durchlauf vornehmen, um zu ermitteln, wie die Datensätze in sortierter Reihenfolge abgerufen werden können.
Using temporary Um die Abfrage aufzulösen, muss MySQL eine Temporärtabelle zur Aufnahme des Ergebnisses erstellen.
Wobei die beiden Sachen jeweils vom Group-By ausgelöst werden.
30.05.2007 12:38:51  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Also ich hab jetzt beide Queries mal durchgejagt. Nach mehrmaligen ausführen brauchen beide nur 0.0001Sekunden in PHPMyAdmin.

Vermutlich wird man erst erkennen können welches schneller ist wenn die Datenbank entsprechend angewachsen ist.
30.05.2007 12:40:20  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
Ihr übertreibt es jungs Augenzwinkern
30.05.2007 12:44:43  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achse-des-boesen

Leet
 
Zitat von TriggerTG

Ihr übertreibt es jungs Augenzwinkern


Denkst du.
Wenn man allerdings auf Tabellen arbeitet die ein paar hundertmillionen Datensätze enthalten spielt es schon eine Rolle ob eine Query 2 Sekunden oder 200 braucht. Und ich bewege mich - immernoch - in Bereichen wo sowas durchaus öfter mal vorkommt. Augenzwinkern
Wobei wir natürlich nicht Mysql einsetzen...
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Achse-des-boesen am 30.05.2007 12:48]
30.05.2007 12:47:32  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
[C.I.] Reman

Arctic
Sondern Ihr benutzt... Bitte setzen Sie den Satz logisch fort.
30.05.2007 12:55:08  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
sqllite Augenzwinkern
30.05.2007 13:00:19  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
[C.I.] Reman

Arctic
Wer outet sich und sagt "Access"? peinlich/erstaunt
30.05.2007 13:02:09  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
Warum Outen?

Access hat durchaus seine Lebensberechtigung
30.05.2007 13:04:51  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Zensiert

AUP Zensiert 28.11.2007
Targ :x

Kris
30.05.2007 13:07:06  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Achse-des-boesen

Leet
So, jetzt mal ein wenig Optimierung. Wenn man sich die Spalte "rows" beim Explain anschaut, sieht man wie viele Zeilen die DB beim auflösen des Queries durchlaufen hat. Wenn man nun das Produkt aus diesen Zahlen bildet, bekommt man die Anzahl der Vergleiche, die die DB durchgeführt hat was sich wierrum ziemlich linear in CPU-Zeit niederschlägt.
Unoptimiert waren das...
- bei Ghandi: 3 * 6 * 4 * 6 * 4 * 6 = 10368
- bei mir: 3 * 4 * 6 * 4 * 6 = 1728
Das mein Query anfangs langsamer war lag daran, dass ich mit dem Hobby-Namen gearbeitet habe, wärend Ghandi die ID benutzt hat, intern also ein Binärer-Stringverleich gegen einen Binären Integervergleich stand.

Fägt man jetzt auf sämtliche ID-Spalten in Relation, Hobby und Schueler einen Index hinzu, landet man bei...
- Ghandi: 3 * 6 * 1 * 2 * 1 * 2 = 72
- mir: 3 * 1 * 2 * 1 * 2 = 12
Das ganze ist schonmal ein dramatischer unterschied zu vorher.
Wenn man das jetzt weiter aufschlüsselt, läuft er bei mir einmal komplett durch Schueler und die restlichen Dinge sind einfache Zugriffe über den Index.
Bei Ghandi sieht es ähnlich aus, allerdings müssen die beiden Subselects erst in einer temporären Tabelle gespeichert werden, dessen Länge wiederum das Produkt aus Anzahl der Subselect mal Länge der Schueler ist. Ghandis anfragen wird also bei großen Datenmengen um den Faktor 2*length(Schueler) langsamer sein und wegen der Temporären Tabelle auchnoch viel Ram benötigen Augenzwinkern

Achja, und wir benutzen Sybase.

/: Und wenn ihr meint ich übertreibe: Ich hab gerade mal in unsere Produktionstabelle geschaut und mir mal die Tabelle rausgepickt, in der die Meldepunkte (was ist wann wo) für unsere Produkte gespeichert werden. Im aktiven Bestand sind das 600000 Zeilen und in der History 3Mio (History = die letzten 30 Tage). Das Archiv hab ich jetzt mal rausgelassen, aber darin stehen die Daten der letzten 5 Jahre, sollten also 150-180Mio sein. Wenn man bedenkt, dass das zwar eine der aktivsten Tabellen ist, aber eben nur eine von einer ganze Menge, dann sollte klar sein, warum ich einens etwas anderen Bezug zu sowas habe peinlich/erstaunt
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von Achse-des-boesen am 30.05.2007 13:38]
30.05.2007 13:17:57  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Offroader

Russe BF
hi,
aus irgend einem Grund werden auf dem selbst installierten Apache2 keine meta-Angaben aus dem head gelesen. Dies verhält sich mit mehreren Seiten so, auf anderen Servern funktionieren diese aber. Wo könnte das Problem liegen?
30.05.2007 13:19:30  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Höö? Welche Meta-Angaben? Die, die in einer HTML Datei innerhalb der HEAD-Tags stehen? Wenn diese gemeint sein sollten, darauf hat der verwendete Webserver überaupt keinen Einfluss. Breites Grinsen

@Achse
Ich hab ja noch gar nichtmal optimiert...ich hab doch nur geschaut das es geht *bibber* Augenzwinkern Breites Grinsen
30.05.2007 13:43:32  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Smoking

AUP Smoking 09.09.2023
verschmitzt lachen
http://www.heise.de/newsticker/meldung/90357
30.05.2007 13:45:04  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
v!pe

Phoenix
 
Zitat von Zensiert

Targ :x

Kris


Kohle? Augenzwinkern
30.05.2007 13:48:58  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Zensiert

AUP Zensiert 28.11.2007
 
Zitat von v!pe

 
Zitat von Zensiert

Targ :x

Kris


Kohle? Augenzwinkern




Überweise ich dir morgen, wenn es in Ordnung ist. Mein Konto sieht zur Zeit ein wenig rot aus :>

Kris
30.05.2007 13:55:10  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
Sexuelle Gefälligkeiten?
30.05.2007 13:58:23  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
SkunkyVillage

PpdpP - SkunkyVillage
Jetzt noch zwei Stunden Bio. traurig
30.05.2007 13:59:52  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
Offroader

Russe BF
 
Zitat von GH@NDI

Höö? Welche Meta-Angaben? Die, die in einer HTML Datei innerhalb der HEAD-Tags stehen? Wenn diese gemeint sein sollten, darauf hat der verwendete Webserver überaupt keinen Einfluss. Breites Grinsen
@Achse
Ich hab ja noch gar nichtmal optimiert...ich hab doch nur geschaut das es geht *bibber* Augenzwinkern Breites Grinsen



ja diese sind gemeint. Und es kommt mir auch recht merkwürdig vor, aber:
wenn ich die Seite lokal lade funktioniert es, wenn ich sie zB über meinen Space bei Arcor lasse funktioniert es, und bei dem Apache eben nicht. Habs jeweils mit FF und IE6 versucht!
30.05.2007 14:00:56  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
TriggerTG

TriggerTG
Was genau versuchst du denn zu machen?
30.05.2007 14:02:18  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
GH@NDI

ghandi2
Eben, wie glaubst du denn Festzustellen ob es funtioniert? Was machst du denn da? So ne Zeitgesteuerte Umleitung? Oder so eine Navigationsleiste oben einblenden?
30.05.2007 14:04:37  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
v!pe

Phoenix
 
Zitat von Zensiert

 
Zitat von v!pe

 
Zitat von Zensiert

Targ :x

Kris


Kohle? Augenzwinkern




Überweise ich dir morgen, wenn es in Ordnung ist. Mein Konto sieht zur Zeit ein wenig rot aus :>

Kris


Solange das sicher ist, ists ok. Will nur nich in 2 Wochen hören: "Oh ne brauch ich doch nich kkthxbaibai"
30.05.2007 14:06:23  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
SirSiggi

SirSiggi
ffffffaasdasdqsaeqsfqasfsq
30.05.2007 14:06:33  Zum letzten Beitrag
[ zitieren ] [ pm ] [ diesen post melden ]
 Thema: Gehirnsalat ( wir unter uns )
« erste « vorherige 1 ... 639 640 641 642 [643] 644 645 646 647 ... 6582 nächste » letzte »

mods.de - Forum » Webdesign & Coding » 

Hop to:  

Thread-Tags:
Mod-Aktionen:
23.08.2018 12:40:15 TriggerTG hat den Thread-Titel geändert (davor: "Wiederbelebungssalat")
09.03.2017 08:55:19 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")
21.05.2014 16:08:26 Redh3ad hat den Thread-Titel geändert (davor: "Hochzeitssalat")
10.05.2014 09:43:28 Redh3ad hat den Thread-Titel geändert (davor: "Gehirnsalat")
19.10.2013 21:43:03 [DK]Peacemaker hat diesen Thread repariert.
04.10.2013 20:11:45 TriggerTG hat den Thread-Titel geändert (davor: "Damiferkel-Salat")
29.08.2013 19:59:27 [DK]Peacemaker hat den Thread-Titel geändert (davor: "HerpDerpSalat")
19.08.2013 10:04:19 TriggerTG hat den Thread-Titel geändert (davor: "SirSiggiSalat")
13.08.2013 18:43:13 TriggerTG hat den Thread-Titel geändert (davor: "Kamelwochensalat")
05.08.2013 09:47:37 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")
24.06.2013 16:30:39 TriggerTG hat den Thread-Titel geändert (davor: "cmssalat")
20.06.2013 12:58:35 TriggerTG hat den Thread-Titel geändert (davor: "Krissalat")
13.06.2013 10:59:25 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")
08.06.2013 11:28:06 TriggerTG hat den Thread-Titel geändert (davor: "rABBIntensalat")
03.06.2013 09:56:52 TriggerTG hat den Thread-Titel geändert (davor: "Gehirnsalat")

| tech | impressum