私のmysqlビューは何千ものデータで実際には遅いですが、どうすればこの機能を改善できますか?Mysqlビューが非常に遅い
10000sのデータでこのビューをフェッチすると、30秒以上かかります。このビュー表をどのように修正できますか?ユーザーEXPLAIN SELECT
AFTER
SELECT
i.jo_in_id,
j.*,
i.jo_in_week_number,
i.jo_in_client_ref_no,
i.cl_id AS jo_in_cl_id,
c.cl_short_name,
c.cl_business_name,
m.me_first_name,
m.me_last_name,
m.me_mobile,
sk.sk_name,
sk.sk_ticketed,
ti.ti_id,
ta.ta_name,
u.un_id,
u.un_from,
u.un_to,
v.ve_name,
mp.vmp_name,
r.vr_name
FROM
jo_2_no j2n,
jo_in_numbers i,
jobs j
LEFT JOIN venues_new v ON j.ve_id = v.ve_id
LEFT JOIN venues_meeting_place mp ON j.vmp_id = mp.vmp_id
LEFT JOIN venues_rooms r ON j.vr_id = r.vr_id
LEFT JOIN clients c ON j.cl_id = c.cl_id
LEFT JOIN members m ON j.me_id = m.me_id
LEFT JOIN skills sk ON j.sk_id = sk.sk_id
LEFT JOIN tasks ta ON j.ta_id = ta.ta_id
LEFT JOIN crew_tickets ti ON j.sk_id = ti.sk_id AND j.me_id = ti.me_id AND j.jo_time_off < ti.ti_expire
LEFT JOIN unavailability u ON j.me_id = u.me_id AND ((j.jo_time_on BETWEEN u.un_from AND u.un_to) OR (j.jo_time_on BETWEEN u.un_from AND u.un_to))
WHERE
j.jo_id = j2n.jo_id
AND j2n.jo_in_numbers_id = i.jo_in_id
あなたのEXPLAINで出力され
結合列にインデックスがありますか?それ以外の場合、ビューの使用をやめることができます。 –
@TimBiegeleisenビューは他のクエリより遅くも高速でもありません。 – arkascha
主な原因は、多数の表を結合するという単純な事実が考えられます。それは遅いです。適切なインデックスを使ってスピードアップを試みることができますが、これまでのところしかできません。少なくとも、最初の3つのテーブルに使用された "カンマ結合"を使用してください。これは、結果セット用に作成された一時テーブルを元に戻します。設定した値が大きいほどクエリが遅くなります。しかし、最終的には、クエリ(表示)を簡略化できるようにデータベースを再設計する必要があります – arkascha