• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SELECT optimieren

scbawik

Senior HTML'ler
Hallo!

MySQL und ich werden wohl keine Freunde mehr:

Code:
SELECT a.address_id FROM addresses AS a
LEFT JOIN cities AS c ON (a.city_id = c.city_id)
LEFT JOIN cities_i18n AS cl ON (c.city_id = cl.city_id)
WHERE a.disabled = 0
GROUP BY a.address_id
ORDER BY cl.label
LIMIT 30

Diese Abfrage über die Tabellen addresses (ca 200000 Einträge), cities (ca 10000 Einträge) und cities_i18n (ca 20000 Einträge) benötigt rund 8 Sekunden. Das ist absurd.
Indizes sind gesetzt.

Hat jemand eine Idee wie ich diese Abfrage optimieren kann?

EDIT: Habe das GROUP BY weggelassen und bin jetzt bei 1 Sekunde, damit kann ich leben. Hoffe nur das Ergebnis bleibt gleich.
 
Zuletzt bearbeitet:
Um das zu optimieren wäre es zunächst sinnvoll in Worten zu formulieren, was Du mit diesem Statement überhaupt auslesen willst?
 
Um das zu optimieren wäre es zunächst sinnvoll in Worten zu formulieren, was Du mit diesem Statement überhaupt auslesen willst?

addresses ist per city_id mit cities verknüpft.
cities_i18n enthält die lokalisierten Bezeichnungen der cities, ebenfalls per city_id mit cities verknüpft. Bspw. München/Munich/Monaco.

Die Beziehung der Tabellen ist folgende:
addresses.city_id [ManyToOne] cities.city_id
cities.city_id [OneToMany] cities_i18n.city_id

Ich will jetzt alle Adressen (addresses), sortiert nach internationalisierter Orte-Bezeichnung (cities_i18n.label)
 
Zurück
Oben