1

このクエリの実行中:

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 は非常に長い時間クエリを実行しています (ほとんどのテーブルには数万のレコードがあります)。結合された列でソートすることは可能ですか?

4

2 に答える 2

0

最初にサブクエリでレコードをフィルター処理 (順序、場所など) してから、結果を残りのテーブルと結合できます。

于 2013-07-26T12:38:46.130 に答える