我有这个非常简单的SQL查询
SELECT v.*, u.user_company as company_name, o.`name` as object_name,
o.address as object_address, i.id as installation_id, i.`name`
as installation_name FROM maintenance as v, users as u,t_local as o,
t_local_objects as i WHERE o.active=1 AND v.done IS NOT NULL
最大的表 - maintenance
,它有大约3k的记录,其他的大约有300,这并不是那么多。当我执行它时,我得到一个内存过载(试图分配超过130MB)。如何优化查询?
表格会随着时间的推移而变大,因此它必须对maintenance
中超过10k的记录有效。
答案 0 :(得分:1)
你可能正在寻找JOINS。而表中的3K行并不多,而是太少了。加入表格,您将快速得到结果。
像这样的东西:
SELECT v.*, u.user_company as company_name, o.`name` as object_name,
o.address as object_address, i.id as installation_id, i.`name`
as installation_name
FROM maintenance as v inner join users as u on v.id = u.id
.....
WHERE o.active=1 AND v.done IS NOT NULL
答案 1 :(得分:0)
您的sql查询中存在错误,您应该使用联接。
你在哪里获得内存负载? 根据使用此查询的应用程序类型,您可以尝试: 1.如果是网络或桌面应用程序,您可以尝试分页,例如,将记录限制在一个范围内 2.如果你在squirrel或SQL Management studio等sql工具中运行,我会建议检查错误的来源,这是工具中的错误吗?您可以尝试设置存储过程,该过程在范围
中给出结果