SQL查询 - 内存重载

时间:2015-04-09 10:31:01

标签: mysql

我有这个非常简单的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的记录有效。

2 个答案:

答案 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工具中运行,我会建议检查错误的来源,这是工具中的错误吗?您可以尝试设置存储过程,该过程在范围

中给出结果