2016-03-23 5 views
0

Hier ist mein Problem, ich bin die Auswahl und mache mehr das richtige Element erhalten verbindet.beschleunigt MySQL-Abfrage mit mehreren Verknüpfungen

Wer weiß, wie ich das oben beschleunigen kann? Es dauert ungefähr 19 Sekunden?

Hier ist die Abfrage.

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 

Ich bin nicht der größte mit mysql so wäre jede Hilfe dankbar!

Vielen Dank im Voraus!

Ein Erklären Of My 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

Könnten Sie einige weitere Informationen zur Verfügung stellen: die Struktur Ihrer Tabellen, die ungefähre Anzahl der Zeilen in jeder? – Loufylouf

+0

't1 - id \t userid \t orderid \t PackageID \t Server \t regdate - 16000 rows' ' t 2 - FieldID RELID Wert - 80.000 Rows' 't 3 - \t id \t Typ \t RELID \t Feldname \t Feldtyp \t Beschreibung \t fieldoptions \t RegExpr \t Adminonly \t erforderlich \t showorder \t showinvoice \t sortorde - 5000 rows' 't 4 - Volltexte \t course_id \t COURSE_TITLE \t cour se_location \t course_pid \t course_venue \t course_note - 500 rows' 't5 - Volltexte \t date_id \t date_select \t date_courselocation \t date_coursetitle \t date_coursedisplay - 21.000 rows' dies hilft mit benutzerdefinierten Tabellen –

+1

ein lesbares Format würde, sein eine WHMCS Datenbank @Loufylouf Hoffnung viel besser als das. Wie eine korrekt eingerückte 'CREATE TABLE', die uns die verschiedenen Arten Ihrer Spalten sowie eine Möglichkeit zum schnellen Erstellen Ihrer Tabellen zum Testen gibt. Und solch eine Information ist wirklich wichtig, also wäre es besser, sie zu Ihrer Frage hinzuzufügen, als hier in den Kommentaren. – Loufylouf

Antwort

0

Ich denke, Aufklärung über die Indizes helfen würde. Es ist noch ziemlich kurz, um den Kontext zu bestätigen. Ich empfehle die folgenden Indizes zur Optimierung.

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) 

Zumindest mit Ihrer Tblcustomfields-Tabelle, kann es teilweise über die ID-Spalte zuerst optimiert werden, DANN der Feldname.

Die meisten dieser Indizes decken Indizes bedeutet, dass es nicht wieder auf die Rohdaten Seiten zu gehen hat die Verbindung zu vervollständigen, direkt alle Daten aus den Indizes greifen kann.