这是我的问题,我正在选择并进行多次连接以获得正确的项目。
任何人都知道如何加快速度吗?大约需要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
答案 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列进行部分优化,然后再使用字段名称。
这些索引中的大多数都覆盖索引,这意味着它不必回到原始数据页面来完成连接,它可以直接从索引中获取所有数据。