我在mysql中运行一个包含JOIN,ORDER BY和LIMIT的查询, 查询是
SELECT r。* FROM register r INNER JOIN payment p ON r.matri_id = p.pmatri_id WHERE p.p_plan LIKE'%Free%'ORDER BY r.index_id DESC LIMIT 0,10
其中寄存器表包含近5098个记录和付款表包含近5023条记录,现在发生的事情就是当我运行此查询时,它需要很长时间才能获得结果 它花了将近102秒到147秒(如果我也将极限设置为10)。 当我试图运行时
从付款中选择* 要么 select * from register
从注册或付款查询,整个表格结果在0.01秒内完成。
我还尝试修改上面的查询,如果我删除 ORDER BY ,一切正常,在通过连接删除订单后,它只需要0.04秒或更少..
我不知道我遗失的地方或遗失的地方,请查看查询并告诉我解决方案。
提前致谢...
答案 0 :(得分:1)
只需重新编写,使用左连接。
SELECT r.*,
m.mtongue_id, m.mtongue_name,
rel.religion_id, rel.religion_name,
c.caste_id, c.caste_name,
con.country_id, con.country_name,
st.state_id, st.state_name,
ct.city_id, ct.city_name,
des.desg_id, des.desg_name,
ocp.ocp_id, ocp.ocp_name
FROM register r
LEFT JOIN mothertongue m ON r.m_tongue = m.mtongue_id
LEFT JOIN religion rel ON r.religion = rel.religion_id
LEFT JOIN caste c ON r.caste = c.caste_id
LEFT JOIN country con ON r.country_id = con.country_id
LEFT JOIN state st ON r.state_id = st.state_id
LEFT JOIN city ct ON r.city = ct.city_id
LEFT JOIN designation des ON r.designation = des.desg_id
LEFT JOIN occupation ocp ON r.occupation = ocp.ocp_id
WHERE r.matri_id = 'MF1202'
假设连接的id字段是其表中的所有主键。