Web サイトのプロファイルのプレビューを生成するクエリを作成しています。
クエリにはいくつかのテーブルが含まれ、特定の情報、つまり名前と特定のプロファイルの統計の COUNT() を取得します。つまり、いいねの数です。
以下のクエリは、実行に時間がかかります。私が目にする問題の 1 つは、LEFT JOINS を使用してすべてのデータを取得していることです。まず第一に、どのクエリにどのJOINを使用するかを選択する方法について、誰かが私を助けることができます.
それ以外に、私が間違っていることを誰でも見ることができます。実行に時間がかかるのは何ですか。
クエリは次のとおりです。
SELECT u.id AS id,
u.about AS About,
CONCAT(u.fn,' ',u.ln) AS Fullname,
u.username AS Username,
i.image AS Image,
COUNT(DISTINCT a.id) AS Contacts,
COUNT(DISTINCT ul.id) AS Thumbs,
u.views AS Views,
COUNT(DISTINCT o.id) AS TrybesStarted,
COUNT(DISTINCT ti.id) AS TrybesJoined,
COUNT(DISTINCT ai.id) AS AmbitionsSupporting,
COUNT(DISTINCT am.id) AS AmbitionsCompleted,
COUNT(DISTINCT sp.id) AS Posts
FROM x_table1 u
/* PIC */
LEFT JOIN x_table2 i
ON u.id = i.user_id
/* CONTACTS */
LEFT JOIN x_table3 a
ON (u.id = a.to AND a.accepted = 1 OR u.id = a.from AND a.accepted = 1)
/* THUMBS UP */
LEFT JOIN x_table4 ul
ON (u.id = ul.profile_id)
/* TRYBES STARTED */
LEFT JOIN x_table5 o
ON (u.id = o.profile_id)
/* TRYBES JOINED */
LEFT JOIN x_table6 ti
ON (u.id = ti.to AND ti.accepted = 1)
/* AMBITIONS SUPPORTING */
LEFT JOIN x_table7 ai
ON (u.id = ai.to AND ai.accepted = 1)
/* AMBITIONS COMPLETED */
LEFT JOIN x_table8 ao
ON (u.id = ao.profile_id)
LEFT JOIN x_table9 am
ON (ao.ambition_id = am.id AND am.complete = 1)
/* POSTS */
LEFT JOIN x_table10 sp
ON (u.id = sp.profile_id)
WHERE u.id = '1234userid'
すべてのテーブル データが正しいと仮定して、必要に応じてリクエストを送信してください。
Ps/* AMBITIONS COMPLETED */
クエリを追加する前は、問題なく実行されていたようです。二重のLEFT JOINが含まれているためだと思います。
前もって感謝します