【发布时间】:2010-12-30 01:47:19
【问题描述】:
我是 MySQL 新手,我对内存有疑问。
我有一个 200mb 的表(MyISAM,2,000,000 行),我尝试将其全部加载到 记忆。
我使用python(实际上是python中的MySQLdb)和sql:SELECT * FROM table。
但是,从我的 linux“顶部”中,我看到这个 python 进程使用了我 50% 的内存(总共 6GB)
我很好奇为什么它只为一个 200 mb 的表使用大约 3GB 的内存。 提前致谢!
【问题讨论】:
-
生产数据库绑定不应该使用与请求大小成比例的内存;只要您不将结果保留在自己身边,就应该在您收到更多数据时释放旧数据。并非所有数据库绑定都能正确执行此操作,但这始终是一个错误;您应该能够从数据库后端选择无限范围,增量处理结果并且内存使用不应无限制地减少。
-
尽管有一些数据库工具,但使用
select *几乎总是是个坏主意。您通常应该明确列出您想要的列。