在運行此查詢:排序結果從加入
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