Ich habe zwei Tabellen, jos_eimcart_customers_addresses und jos_eimcart_customers. Ich möchte alle Datensätze aus der Tabelle "customers" abrufen und Adressinformationen aus der Tabelle "addresses" einbeziehen, sofern vorhanden. Die Abfrage funktioniert, aber auf meinem Localhost-Rechner dauerte die Ausführung über eine Minute. Auf localhost haben die Tabellen jeweils etwa 8000 Zeilen, aber in der Produktion können die Tabellen jeweils über 25.000 Zeilen haben. Gibt es eine Möglichkeit, dies zu optimieren, damit es nicht so lange dauert? Beide Tabellen haben einen Index auf das Feld id, das ein Primärschlüssel ist. Gibt es einen anderen Index, den ich erstellen muss, damit das Ganze schneller läuft? Sollte die Tabelle "Adressen" einen Index für das Feld "customer_id" haben, da es sich um einen Fremdschlüssel handelt? Ich habe andere Datenbankabfragen, die ähnlich sind und für viel größere Tabellen schneller ausgeführt werden.
(BEARBEITET UM HINZUZUFÜGEN: Es kann mehr als einen Adressdatensatz pro Kunde geben, daher ist customer_id kein eindeutiger Wert in der Tabelle addresses).
select
c.firstname,
c.lastname,
c.email as customer_email,
a.email as address_email,
c.phone as customer_phone,
a.phone as address_phone,
a.company,
a.address1,
a.address2,
a.city,
a.state,a.zip,
c.last_signin
from jos_eimcart_customers c
left join jos_eimcart_customers_addresses a
on c.id = a.customer_id
order by c.last_signin desc
BEARBEITET ZUM HINZUFÜGEN: Ergebnisse erläutern
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
==========================================================================================
1 | SIMPLE | c | ALL | NULL | NULL| NULL |NULL |6175 |Using temporary; Using filesort
---------------------------------------------------------------------------------------
1 | SIMPLE | a | ALL | NULL | NULL| NULL |NULL |8111 |