2012-04-26 12 views
1

次のクエリを高速化する方法はありますか?実行に約6秒かかります。各テーブルには約1000個のレコードしか含まれていないので、巨大ではありません。私は複数のLEFT JOINを追加するとMySQLクエリー速度の結合

SELECT c. * , q.qualification_name, CONCAT(u.firstname, ' ', u.lastname) AS name, v.venue_name, v.address_town 
FROM p_courses c 
LEFT JOIN p_qualifications q ON c.qualification_name = q.ref 
LEFT JOIN p_users u ON c.instructor_number = u.instructor_number 
LEFT JOIN p_venues v ON c.venue_token = v.token 
WHERE (
c.status = 'completed' 
OR c.status = 'confirmed' 
) 

は、上記のクエリが動作し、要求に応じて、すべてのデータを取得し、それだけで、すぐに長い時間がかかります。

ありがとうございました。

EDITED。クエリの前にEXPLAIN追加

は...これを返す

id select_type table type possible_keys key key_len ref  rows Extra 
1 SIMPLE  c  ALL  NULL   NULL NULL  NULL 1288 Using where 
1 SIMPLE  q  ALL  NULL   NULL NULL  NULL 21 
1 SIMPLE  u  ALL  NULL   NULL NULL  NULL 518 
1 SIMPLE  v  ALL  NULL   NULL NULL  NULL 669 

申し訳ありませんが、私はそれをどのように解釈するかは非常にわかりません。

答えて

0
  1. EXPLAINをクエリの前に置くことで何が問題なのかを確認してください。
  2. あなたの仲間とあなたのどこにそれらを使用できるようにあなたのindecesを設定します。
  3. あなたをチェックしてくださいEXPLAIN
  4. 泡、すすぎ、繰り返し。

ヒント:あなたは、それはクエリがインデックスを使用しているようには見えません投稿説明から

c.qualification_name 
q.ref 
c.instructor_number 
u.instructor_number 
c.venue_token 
v.token 
c.status 
+0

申し訳ありませんが、私はフォーマットが面倒だと知っています。 – Rob

+0

あなたはあなたの質問の中でそれを編集し、そこに書式を修正するべきですが、何よりもそれをチェックし、それから何が分かるかを見てください。私が言ったように、あなたが参加しているフィールドにインデックスが必要です//どこで実行するか、インデックスを追加し、それが役立つかどうかを確認してください。 1つの説明をダンプしないで、私が提案したものを試してください:) – Nanne

+0

フォーマットが修正されました。だから私はこれらのフィールドにインデックスを追加する必要があるようです。 – Rob

0

:あなたはおそらく上のインデックスをしたいです。 q.ref、u.instructor_number、v.tokenがインデックスに登録されていることを確認してください

+0

助けてくれてありがとう。 – Rob