Mysql 存储过程使用的内存比预期的多

Mysql 存储过程使用的内存比预期的多,mysql,memory,stored-procedures,Mysql,Memory,Stored Procedures,我构建了一个存储过程,它构建了一个内存临时表a,然后通过循环标准游标的结果来填充数据。数据通过从数据库中的其他MyISAM表中的几个连接被选择到临时表中。SP工作正常,但运行时遇到了满表内存限制。为了解决这个问题,我提高了内存限制: set @@tmp_table_size=127108864; (121MEGs) set @@max_heap_table_size=127108864; (121MEGs) 这是关于如何使我的SP成功运行的问题。这对我来说似乎很奇怪,因为创建并返回的表A(通过

我构建了一个存储过程,它构建了一个内存临时表
a
,然后通过循环标准游标的结果来填充数据。数据通过从数据库中的其他MyISAM表中的几个连接被选择到临时表中。SP工作正常,但运行时遇到了满表内存限制。为了解决这个问题,我提高了内存限制:

set @@tmp_table_size=127108864; (121MEGs)
set @@max_heap_table_size=127108864; (121MEGs)

这是关于如何使我的SP成功运行的问题。这对我来说似乎很奇怪,因为创建并返回的表
A
(通过select*from A)的大小只有16meg。我不确定是什么导致了内存需求的另一部分,即大约100MEGs。SP使用的内存似乎比所需的多。我的猜测是,作为游标循环一部分在SP中运行的联接在运行后会留下它们的临时表,并且在SP完成执行之前不会清理这些临时表。这意味着内存中有一大堆连接的临时表在浮动。是否有任何方法可以停止此操作或验证SP游标循环内运行的这些连接是否占用了额外内存?这段记忆是不是来自别的什么?感谢所有帮助您的人。

根据您的查询,mysql可以创建多个临时表,因此-在每个查询上使用EXPLAIN EXTENDED查找创建它的方法。谢谢你知道当我发现有问题的查询时我该怎么做吗?优化它,创建索引,重新构造数据库,重新思考体系结构。根本没有一个解决方案:(我知道:`(你是对的。我只是一个在办公室太晚了,希望比睡眠更多的人。谢谢你。