带有连接的mysql查询,order by和limits

时间:2017-07-30 18:33:33

标签: mysql sql

我在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秒或更少..

我不知道我遗失的地方或遗失的地方,请查看查询并告诉我解决方案。

提前致谢...

1 个答案:

答案 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字段是其表中的所有主键。