Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Select optimieren.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL Select optimieren.

    Vorab.
    Ich verwende:
    MySQL 5.6.19

    Folgender Select benötigt 2 Sekunden:
    Code:
    SELECT p.id AS id, p.name name, count( g.id ) AS wins, count( r.player ) AS games, p.rating AS rating
    FROM player_game_relations r
    LEFT OUTER JOIN game g ON ( g.id = r.game
    AND g.winner = r.team_id )
    LEFT OUTER JOIN player p ON ( p.id = r.player )
    GROUP BY r.player
    ORDER BY
    count(g.id) DESC
    LIMIT 1 , 40
    Das hier kommt dabei rum wenn ichs "explain"e
    Code:
    1 	SIMPLE 	r 	ALL 	NULL	NULL	NULL	NULL	91844 	Using temporary; Using filesort
    1 	SIMPLE 	g 	eq_ref 	PRIMARY 	PRIMARY 	4 	game.r.game 	1 	Using where
    1 	SIMPLE 	p 	eq_ref 	PRIMARY 	PRIMARY 	4 	game.r.player 	1 	NULL
    Der benötigt allerdings viel zu lange ;& jetzt suche ich einen weg diesen zu beschleunigen. Kann mir da jemand helfen?

  • #2
    Zitat von illmaren Beitrag anzeigen
    Vorab.
    Ich verwende:
    MySQL 5.6.19
    Mein Beileid.


    Der benötigt allerdings viel zu lange ;& jetzt suche ich einen weg diesen zu beschleunigen. Kann mir da jemand helfen?
    Indexe?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Als erstes könntest du mal damit anfangen den Query logisch korrekt zu schreiben.
      Es kann schlecht ein player_game_relations ohne Spieler oder Spiel geben. Also wäre das ein INNER JOIN oder ein LEFT JOIN vom Spieler aus (Spieler ohne Spiel). Damit kannst du dann auch den JOIN auf game weglassen, die Informationen ergeben sich schon aus player_game_relations.

      Ansonsten ist so ein Query prinzipiell immer problematisch. Du sortierst nach einem berechneten Ergebnis, damit ist die Datenbank gezwungen dieses Ergebnis für alle Daten zu berechnen. Ohne Caching kommst du damit also nicht weit...

      Kommentar


      • #4
        Zitat von erc Beitrag anzeigen
        Damit kannst du dann auch den JOIN auf game weglassen, die Informationen ergeben sich schon aus player_game_relations.
        weit...
        game wird benötigt da dort drin steht ob das spiel gewonnen ist oder nicht.

        Kommentar

        Lädt...
        X