使用多个连接加速MySQL查询

时间:2016-03-23 17:54:30

标签: php 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不是最好的,所以任何帮助都会受到赞赏!

提前致谢!

解释我的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

1 个答案:

答案 0 :(得分: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列进行部分优化,然后再使用字段名称。

这些索引中的大多数都覆盖索引,这意味着它不必回到原始数据页面来完成连接,它可以直接从索引中获取所有数据。