Ich habe 4 Tabellen (1 zu viele): Sag nichts über diese "E-Mail" -Beziehung. So hat mein Entwickler-Chef es vor Jahren aufgebaut.MYSQL Stuck Generierung temporäre Tabelle (massive Abfrage)
EMPLOYEES (+-50 results)
------------------------------------------------
id name
1 EmpName 1
2 EmpName 2
CUSTOMERS (+50k results)
------------------------------------------------
id name email employee_assigned
1 John [email protected] 12
2 Donald [email protected] 6
INTERESTS_CATEGORIES (+650k results)
------------------------------------------------
id customer_email category_id
1 [email protected] 97
2 [email protected] 13
3 [email protected] 56
4 [email protected] 126
5 [email protected] 45
INTERESTS_PRODUCTS (+650k results)
------------------------------------------------
id customer_email product_id
1 [email protected] 78
2 [email protected] 23
3 [email protected] 19
4 [email protected] 56
5 [email protected] 45
Also brauche ich die Kunden von den ihnen zugewiesenen Mitarbeiter und ihre Interessen zu filtern. Und hier ist die Abfrage:
SELECT
*
FROM
(
SELECT
customers.id AS 'id',
customers.name AS 'first_name',
customers.email,
employees.id AS 'employee_id'
FROM
customers,
employees
WHERE
employees.id = 2
AND
customers.employee_assigned = employees.id
) AS myCustomers
LEFT JOIN interests_categories
ON interests_categories.customer_email = myCustomers.email
LEFT JOIN interests_products
ON interests_categories.customer_email = myCustomers.email
WHERE
(
interests_categories.category_id = 20
OR
interests_categories.category_id = 21
)
GROUP BY myCustomers.email
Also, das Problem:
Wenn der Arbeitnehmer eine geringe Anzahl von zugewiesenen Kunden (wie 3) Abfrage ist erfolgreich hat.
Wenn der Mitarbeiter eine mittelhohe Anzahl von zugewiesenen Kunden (über 100) hat, stach ab.
ich ausführen PROCESS SHOW und es wird stucked "temp Tabelle generieren".
Wer hat eine Idee? :( Danke
der Unterabfrage befreien Sie sich und benutzen Sie einfach schließt sich Verwenden Sie anstelle des OR in der where-Klausel auch IN. Last Stellen Sie sicher, dass Sie Indizes für die E-Mail-Spalten in jeder Tabelle und für alle Spalten haben, die in den WHERE- oder ON-Klauseln verwendet werden. –
Ich werde es versuchen. Danke für die Antwort. :) –