Datenbanken

Datenbanken

Posts 1-10 of 19
  • User photo
    Moritz Schmale
    The 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?
  • Hans-Joachim Grüßner
    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
  • Erich Kitzmüller
    Erich Kitzmüller
    The 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.
  • Hans-Joachim Grüßner
    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
  • User photo
    Moritz Schmale
    The 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.
  • Hans-Joachim Grüßner
    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
  • User photo
    Moritz Schmale
    The 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.
  • Post visible to registered members
  • Dirk Gunsthövel
    Dirk Gunsthövel    Premium Member
    The 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
  • Post visible to registered members