Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询-内存过载_Mysql - Fatal编程技术网

Mysql SQL查询-内存过载

Mysql SQL查询-内存过载,mysql,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.acti

我有一个非常简单的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)。如何优化查询


随着时间的推移,这些表将变得越来越大,因此它必须对
维护中超过10k条记录有效

您可能正在寻找联接。顺便说一句,表中的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

sql查询中有错误,您应该使用联接

你在哪里得到内存负载? 根据使用此查询的应用程序类型,您可以尝试: 1.如果是web或桌面应用程序,您可以尝试分页,例如,将记录限制在一个范围内
2.如果您在squirrel或sql Management studio之类的sql工具中运行,我建议您检查错误的来源,这是工具中的错误吗?您可以尝试设置一个存储的proc,该proc在一个范围内给出结果

,如果不使用联接,您将隐式执行交叉联接。将每个表的每一行与每个其他表的每一行进行匹配,得到查询中每个表中条目数的总结果集,并相乘。维护有3k行,如果所有其他表都有1k行,那么结果中就有3k*1k*1k行,或者30亿行,这就是内存使用量