Datenbanken
Posts 1-10 of 19
- Back
- Next
-
Moritz SchmaleThe company name is only visible to registered members.MySQL mehrere relationelle Tabellen in einem Query?
Hallo,
ich mache ein kleines Forum, und wenn ich die posts aus der datenbank auslese, muss ich für jede user-id den namen aus einer anderen tabelle auslesen. Das bedeutet, pro post ein zusätzlicher query.
Ich habe die Befürchtung, dass es dadurch zu Geschwindigkeitseinbußen kommt.
Wie macht man das in einem einzigen Query?
- 01 Mar 2008, 7:07 pm
-
Hans-Joachim Grüßner(not a XING member)Re: MySQL mehrere relationelle Tabellen in einem Query?
SELECT
[ALL | DISTINCT | DISTINCTROW ]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
select_expr, ...
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name | expr | position}
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE 'file_name' export_options
| INTO DUMPFILE 'file_name']
[FOR UPDATE | LOCK IN SHARE MODE]]
http://dev.mysql.com/doc/refman/5.1/de/select.html
http://www.php4-forum.de/mysql_select.htm?PHPSESSID=
HTH
Hanjo Grüßner
- 01 Mar 2008, 7:11 pm
-
Erich KitzmüllerThe company name is only visible to registered members.Re: MySQL mehrere relationelle Tabellen in einem Query?
Mit einem Join. Aber ehrlich, ich würde an Ihrer Stelle erst mal die Grundlagen von (My-)SQL lernen. Nicht böse sein, aber Sie machen sich nur selbst das Leben schwer, wenn Sie die Werkzeuge, die sie verwenden, nicht mal im Ansatz beherrschen.
- 01 Mar 2008, 8:12 pm
-
Hans-Joachim Grüßner(not a XING member)Re^2: MySQL mehrere relationelle Tabellen in einem Query?
Hm.. ich wollte es nicht so direkt sagen.
Vielleicht hilft das:
http://www.amazon.de/PHP-MySQL-Schritt-datenbankgestützten-W...
Kann ich empfehlen.
Gruß von der Ostsee
Hanjo Grüßner
- 01 Mar 2008, 8:20 pm
-
Moritz SchmaleThe company name is only visible to registered members.Re^3: MySQL mehrere relationelle Tabellen in einem Query?
Ich habe jetzt selbst die Lösung gefunden, und zwar ohne JOIN:
SELECT user.id AS uid, user.prename, user.surname, thread.id AS tid, thread. *
FROM user AS user, forum_thread AS thread
WHERE user.id = thread.creator
AND topic = '1'
LIMIT 0 , 30
This post was modified on 03 Mar 2008 at 05:57 pm.- 03 Mar 2008, 5:56 pm
-
Hans-Joachim Grüßner(not a XING member)Re^4: MySQL mehrere relationelle Tabellen in einem Query?
Hm... sorry to say, aber das ist ein Join
- 03 Mar 2008, 5:58 pm
-
Moritz SchmaleThe company name is only visible to registered members.Re^5: MySQL mehrere relationelle Tabellen in einem Query?
Tja, dann habe ich mich wohl geirrt,
Hauptsache, es funktioniert
This post was modified on 03 Mar 2008 at 06:01 pm.- 03 Mar 2008, 6:01 pm
-
Post visible to registered members
-
Dirk Gunsthövel Premium MemberThe company name is only visible to registered members.Re^7: MySQL mehrere relationelle Tabellen in einem Query?
Hallo,
Dr. Ralph Leonhardt schrieb:
Diese joins werden meist (wenn sie gross genug sind) in der tempdb aufgebaut und dann wird die where klausel ausgewertet.
Wenn sie also 3 tabellen mit jeweils 30 Mio Zeilen haben(das ist wenig) , dann bauen sie mal eben 2700 Mio Zeilen auf. Hoffentlich haben Sie einige Indizes gesetzt.
wenn wir über ein ernstzunehmendes Datenbanksystem sprechen (ich rechne
einfach mal MySQL dazu...) : warum sollte der Optimizer soetwas Dummes tun?
"Ich stelle mich jetzt erstmal komplett dumm und bilde ein Karthesiches Produkt
aller DS bevor ich mich dazu herablasse, mir die Filterkriterien anzusehen".
Selbst der MS-SQL Optimizer, der nicht gerade für seine Brillianz bekannt ist,
käme nicht auf solche Ideen ;-)
Joins mit solchen Filterkriterien sind auch und gerade auf einer grossen
Anzahl von Datensätzen völlig alltäglich und zunächst einmal grundsätzlich
unproblematisch.
Technisch weden crossjoins wenn nicht noch bessere Verfahren/Heuristiken
implementiert sind als (outer) (nested) hash joins oder (outer) (nested) loop joins
abgearbeitet. Dabei werden die query filter per table verwendet.
Fehlende indexes führen vielleicht zu sequential scans auf der einen oder
anderen Tabelle, was natürlich eine Performance-Katastrophe sein kann.
Den Begriff restringierte joins habe ich noch nie gehört. Wenn damit ansi-
joins gemeint sind: diese unterscheiden sich nur syntaktisch von einem
Join wie er hier vorgeschlagen wird.
Selbst ein two sided outer join führt nicht notwendiger weise zur expliziten
Bildung eines karthesichen Produktes im Temp-bereich. Dieser dient
meist höchstens der Sortierung und wird nicht mehr Daten enthalten
als das letztendliche Resultset umfasst.
Gruss,
Dirk Gunsthövel
- 23 Oct 2008, 11:56 am
-
Post visible to registered members
- Back
- Next
