僅在帶分頁的 MySQL JOIN 中檢索最新行
在處理像 customer_data這樣的歷史資料表時,通常需要聯接僅另一個表的最新行,同時也管理
原始查詢:
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
使用WHERE子句優化JOIN:
僅檢索最新的對於每個客戶的行,將以下條件添加到WHERE子句:
... WHERE d.customer_data_id IN ( SELECT MAX(customer_data_id) FROM customer_data WHERE customer_id = c.customer_id ) ...
替代索引解決方案:
為了提高效能,特別是在繁重的查詢中,請考慮在customer_data 中的(customer_id , customer_data_id) 在欄位上建立索引。這使得 MySQL 能夠快速識別每個客戶的最新行。
索引的WHERE 子句範例:
... 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 與LIKE:
是的,使用CONCAT>是的,使用CONCAT和LIKE 是在多個欄位上搜尋的有效方法連接在一起。當原始列未建立索引並且通常會導致全表掃描時,這特別有用。
其他注意事項:
以上是如何使用分頁有效地僅檢索 MySQL JOIN 中的最新行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!