仅在带分页的 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 和 LIKE 是在多个字段上搜索的有效方法连接在一起。当原始列未建立索引并且通常会导致全表扫描时,这特别有用。
其他注意事项:
以上是如何使用分页有效地仅检索 MySQL JOIN 中的最新行?的详细内容。更多信息请关注PHP中文网其他相关文章!