Abrufen der neuesten Zeile nur in einem MySQL-JOIN mit Paginierung
Beim Umgang mit historischen Datentabellen wie customer_data ist es oft wünschenswert, beizutreten nur die aktuellste Zeile in eine andere Tabelle verschieben und gleichzeitig die Paginierung verwalten.
Original Abfrage:
SELECT *, CONCAT(title,' ',forename,' ',surname) AS name FROM customer c INNER JOIN customer_data d on c.customer_id=d.customer_id WHERE name LIKE '%Smith%' LIMIT 10, 20
Optimierter JOIN mit WHERE-Klausel:
Um nur die aktuellste Zeile für jeden Kunden abzurufen, fügen Sie die folgende Bedingung zum WHERE hinzu Klausel:
... WHERE d.customer_data_id IN ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
Alternative Indexierung Lösung:
Um die Leistung zu verbessern, insbesondere bei umfangreichen Abfragen, sollten Sie erwägen, einen Index für die Spalten (customer_id, customer_data_id) in customer_data zu erstellen. Dadurch kann MySQL schnell die aktuellste Zeile für jeden Kunden identifizieren.
Beispiel WHERE-Klausel mit Index:
... WHERE d.customer_id = c.customer_id AND d.customer_data_id = ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
CONCAT mit LIKE:
Ja, die Verwendung von CONCAT mit LIKE ist eine gültige Methode für die Suche in mehreren miteinander verketteten Feldern. Dies ist besonders nützlich, wenn die Originalspalten nicht indiziert sind und normalerweise zu einem vollständigen Tabellenscan führen würden.
Zusätzliche Überlegungen:
Das obige ist der detaillierte Inhalt vonWie kann ich mit Paginierung effizient nur die aktuellste Zeile in einem MySQL-JOIN abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!