Antworten auf deine Fragen:
Neues Thema erstellen

mysql query optimieren

fakerer

Aktives Mitglied

Hallo,
jemand ne Idee wie man das ganze bescheunigen könnte?
Code:
SELECT     *
FROM
islands
JOIN towns ON (islands.x = towns.island_x AND islands.y = towns.island_y)
LEFT JOIN players ON towns.player_id = players.id
JOIN alliances ON players.alliance_id = alliances.id
WHERE
(islands.island_x <= 10 OR (islands.island_x >= 37 AND islands.island_x <=46));
islands ca 120k zeilen
towns ca 30k zeilen
ergebnis sind ca 30k zeilen
query time 61.462s

oder ist das normal?
aber ich denk mal das das nicht so grosse Datenmengen sind oder?
 
Zuletzt bearbeitet:

holgermerz

Nicht mehr ganz neu hier

AW: mysql query optimieren

Hallo,
zeig mal deine Tabellenstruktur. Evtl. könnten auf die Felder auf die verknüpft werden, ein Index helfen. Problem wird natürlich auch der LEFT JOIN. Versuch mal anstatt SELECT * FROM ..., nur die Felder auszugeben, die du benötigst.
 

ovbb

es gibt für alles eine weg

AW: mysql query optimieren

oft hilft es auch nur das statement zu ändern.

weiß nicht wie gewandt du in der hinsicht bist.

da aber sql mit mengen arbeitet kannst du versuchen die mengen durch geschicktes joinen zu verkleinern, dass die menge zum arbeiten so schon kleiner wird.

kommt natürlich auch darauf an was du wirklich haben willst und brauchst aber 61sekunden sind schon viel
 

fakerer

Aktives Mitglied

AW: mysql query optimieren

also ich hab nun ein wenig redundante informationen hinzugefügt jetzt erspar ich mir den x y join und jetzt passt das ganze auch von der zeit her.
Dachte eigentlich man soll so was immer vermeiden aber was solls.
 

ovbb

es gibt für alles eine weg

AW: mysql query optimieren

glaub nicht, dass du redundante informationen in der DB hast. durch die joins treten immer "gewollte" redundante einträge auf, da ja tabellen verknüpft werden.
 

Curanai

Aktives Mitglied

AW: mysql query optimieren

Mini-Tipp, machte sich aber doch bemerkbar: Mit einem "`" um die Bezeichner für Deine Datenbank (also table und field) nimmst Du dem Parser "Arbeit" ab ... bildlich gesprochen muss er dann nicht erst selbst prüfen, was ist Befehl bzw. was ist Datenbank.

So gesehen würde Dein Query dann so ausschauen: ...
PHP:
SELECT     * FROM `islands` JOIN `towns` ON (`islands`.`x` = `towns`.`island_x` AND `islands`.`y` = `towns`.`island_y`) ...
Einziger Haken: Umstellung von MySQL auf msSQL - der versteht es IMHO nicht und Du darfst das wieder rückgängig machen.

Eine Sache erschließt sich mir nicht, da ich es so noch nie gesehen habe: Wenn Du schlichtweg JOIN nimmst (gilt auch für CROSS), entscheidet MySQL wie die Verknüpfung der Tabellen am effektivsten passieren kann:

PHP:
SELECT * FROM `person`,`haus` WHERE `person`.`id` = `haus`.`besitzer`
(holt nur die "Häuser", deren "Besitzer" bekannt sind; ist auch schon ein JOIN)

Ich würde Dir vorschlagen, dass Du also nicht auf der einen Seite sagst, dass MySQL entscheiden kann, dann aber mit LEFT JOIN die Vorgabe erzwingst. Inwiefern dann eine Anpassung benötigt wird (was Zeit fressen könnte) ... ich denke Du erahnst den Rest.

Ich würde die Dauer mal beobachten, wenn Du statt JOIN ebenfalls einen LEFT JOIN probierst ... das Ergebnis würde mich mal interessieren.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben