在运行此查询:排序结果从加入
SELECT
a.id,
pub.name AS publisher_name,
pc.name AS placement_name,
b.name AS banner_name,
a.lead_id,
a.partner_id,
a.type,
l.status,
s.correctness,
a.landing_page,
t.name AS tracker_name,
a.date_view,
a.date_action
FROM actions AS a
LEFT JOIN publishers AS pub ON a.publisher_id = pub.id
LEFT JOIN placements AS pc ON pc.publisher_id = pub.id
LEFT JOIN banners AS b ON b.campaign_id = a.campaign_id
LEFT JOIN leads l ON
l.lead_id = a.lead_id
AND l.created = (
SELECT MAX(created) from leads l2 where l2.lead_id = l.lead_id
)
LEFT JOIN statuses AS s ON l.status = s.status
LEFT JOIN trackers AS t ON t.id = a.tracker_id
LIMIT 10
我能够通过每列从actions
表进行排序。但是,当我尝试例如ORDER BY b.name
(从banners
表,加入actions.banner_id
)或ORDER BY l.lead_id
(在更复杂的条件下从leads
加入,如上所示)MySQL正在查询一个冗余时间(大多数表有数万个记录)。性能方面,是否可以通过连接列进行排序?
您可以通过添加where子句来提高性能,这样您就不会尝试对很多记录进行排序。 –
@DanBracuk,在这种情况下我不认为这是可能的 - 我想在这里排序结果,而不是过滤它们。 – acid
我想你有你申请加入的所有领域的索引。也可以尝试命令'explain'来查看查询是如何运行的。 – jcho360