2016-03-23 14 views
0

これは私の問題です。私は正しい項目を取得するために複数の結合を選択しています。複数の結合でMySQLクエリを高速化

どのように私はこれをスピードアップできるか知っていますか?それは約19秒かかりますか?

ここにクエリがあります。

SELECT 
     t1.id AS HostingID, 
     t5.date_id AS DateRelid 
    FROM 
     tblhosting AS t1 
     INNER JOIN tblcustomfieldsvalues AS t2 ON t1.id = t2.relid 
     INNER JOIN tblcustomfields AS t3 ON t2.fieldid = t3.id 
     INNER JOIN tbl_course AS t4 ON t1.packageid = t4.course_pid 
     INNER JOIN tbl_dates AS t5 ON t4.course_title = t5.date_coursetitle 
    WHERE 
     t3.fieldname LIKE "%Course Date%" AND 
     t1.id = "$hostingid" AND 
     t1.userid = "$userid" AND 
     t5.date_coursedisplay = t2.value AND 
     t5.date_courselocation = t4.course_location 
    ORDER BY t5.date_id DESC 
     LIMIT 0 , 1 

任意の助けをいただければ幸いですので、私は、MySQLとの最大のではありませんよ!

ありがとうございます!

Anが私のSQL説明:

id select_type  table  type possible_keys      key   key_len  ref       rows  Extra 
1 SIMPLE   t1  const PRIMARY,serviceid,userid,productid PRIMARY  4   const       1  Using temporary; Using filesort 
1 SIMPLE   t5  ALL  NULL         NULL   NULL  NULL       20744 
1 SIMPLE   t3  ALL  PRIMARY        NULL   NULL  NULL       4101  Using where; Using join buffer 
1 SIMPLE   t2  ref  fieldid_relid      fieldid_relid 8   nextstep_next.t3.id,const  1  Using where 
1 SIMPLE   t4  ALL  NULL         NULL   NULL  NULL       664  Using where; Using join buffer 
+0

さらに情報を提供してください:テーブルの構造、おおよその行数? – Loufylouf

+0

'T1 - ID \tユーザーID \t受注\tのPackageID \tサーバ\t regdate - 16000 rows' 'T2 - フィールド識別子RELID値 - 8万Rows' ' T3 - \t ID \tタイプ\t RELID \tフィールド名\t FIELDTYPE \t説明\t fieldoptions \t regExprの\t adminonly \t必要\t showorder \t showinvoice \t sortorde - 5000 rows' 'T4 - \t COURSE_TITLE \tクールをCourse_IDに\t全文se_location \t course_pid \t course_venue \t course_note - 500 rows' 'T5 - フルテキスト\t date_id \t date_select \t date_courselocation \t date_coursetitle \t date_coursedisplay - これは、助けカスタムテーブルとのWHMCSデータベースを願ってい@Loufylouf 21,000 rows' –

+1

読める形式は次のようになりますこれよりも良い方法です。適切にインデントされた 'CREATE TABLE'と同様に、これは異なるタイプのカラムを提供するだけでなく、テストのためにテーブルを素早く作成する方法を提供します。そしてそのような情報は本当に重要なので、あなたの質問にコメントよりもそれを追加する方がいいでしょう。 – Loufylouf

答えて

0

私はインデックスの明確化が役立つだろうと思います。確認するためにはまだまだ簡単です。最適化を支援するために、以下のインデックスを提案します。

Table     index 
tblHosting   (id, userid, packageid) 
tblcustomfieldsvalues (relid, fieldid, value) 
tblcustomfields  (id, fieldname) 
tbl_course   (course_pid) 
tbl_dates    (date_coursetitle, date_courselocation, date_coursedisplay) 

少なくともtblcustomfieldsテーブルでは、フィールド名の後にIDカラムを使用して部分的に最適化することができます。

これらのインデックスのほとんどは、インデックスをカバーしているため、結合を完了するために生データページに戻る必要はなく、インデックスからすべてのデータを直接取得できます。

関連する問題