首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >大型数据集:使用innodb的mysql_unbuffered_query?

大型数据集:使用innodb的mysql_unbuffered_query?
EN

Stack Overflow用户
提问于 2012-04-22 00:24:43
回答 1查看 488关注 0票数 4

基本上,我需要对大数据集进行操作,所以我开始考虑可以使用mysql_unbuffered_query来避免将所有结果加载到内存中。

但是我读到,当我读取行时,我不能在同一个表上运行任何其他查询。我想知道,如果桌子是清白的,这仍然是正确的吗?

Innodb在执行mysql_unbuffered_query时是否使用行级锁定?

伪代码是:

代码语言:javascript
代码运行次数:0
运行
复制
$q = mysql_unbuffered_query("SELECT * FROM largeTable");
while($r = fetch($q)) {
 if (some condition)
   mysql_query("UPDATE largeTable SET field = somevalue WHERE id = someid");
}
EN

回答 1

Stack Overflow用户

发布于 2012-04-22 02:08:08

不能运行另一个查询的原因是查询的结果没有被预取,而您正在处理游标。不过,您可以打开另一个连接来处理其他查询。

请记住,MySQL中有几个设置会影响查询执行后连接保持打开的时间,如果数据集很大,则服务器可以在您处理查询之前关闭连接(请参见wait_timeout和net_write_timeout)

一个好的选择是在循环中执行查询,限制行数,并使用WHERE pk > value ORDER BY pk ASC,其中pk是主键,value是从前一个查询中检索到的最后一个值(就像您实现的只是limit,offset,如果偏移量很大,性能将会下降)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10260819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档