首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MySQL中加速插入/更新1-2mb文本字段?

如何在MySQL中加速插入/更新1-2mb文本字段?
EN

Stack Overflow用户
提问于 2011-09-03 00:56:23
回答 3查看 599关注 0票数 0

我写的机器人收集网页,但有些网页很大,大约1-2mb (通常很大,例如。pantip.com)那么现在我该如何加速呢?

如果遇到超过1mb页面,则每行更新需要4-9秒。

提前感谢

EN

回答 3

Stack Overflow用户

发布于 2011-09-03 01:00:27

你一定要增加max_allowed_packet并重启mysql。就像这样

代码语言:javascript
运行
复制
[mysqld]
max_allowed_packet=256M

MySQL的静默杀手之一是由max_allowed_packet管理的MySQL数据包。

了解MySQL数据包是什么可能会澄清这一点。

根据page 99 of "Understanding MySQL Internals" (ISBN 0-596-00957-7)的说法,以下是1-3段的解释:

MySQL网络通信代码是在假设查询总是相当短的前提下编写的,因此可以将查询作为一个块发送到服务器并由服务器处理,在MySQL术语中称为数据包。服务器将内存分配给一个临时缓冲区来存储数据包,并请求足够的内存来完全容纳数据包。这种架构需要采取预防措施,以避免服务器耗尽内存-对数据包的大小设置上限,而这正是此选项所实现的。

与此选项相关的相关代码可在sql/net_serv.cc.中找到看一看my_net_read(),,然后调用my_real_read()并特别注意net_realloc().

这个变量还限制了许多字符串函数的结果的长度。详细信息请参见sql/field.ccsql/intem_strfunc.cc

根据这个解释,进行批量插入将相当快地加载/卸载MySQL数据包。当max_allowed_packet对于到达它的给定数据负载来说太小时,情况尤其如此。

结论

在大多数MySQL安装中,我通常将其设置为256M或512M。您应该尝试使用较大的值来加载涉及BLOB和文本字段的数据。

票数 1
EN

Stack Overflow用户

发布于 2011-09-03 00:59:40

使用LOAD DATA而不是insert进行大容量插入

您是否对每条记录使用单独的语句?您可能需要查看加载数据文件以进行批量更新。

快速插入的提示:

使用LOAD DATA INFILE语法让MySQL解析它并插入它,即使您必须在操作之后破坏它并提供它。使用以下insert语法:

insert table (col1,col2)值(val1,val2),(val3,val4),...

在插入之前删除所有键/索引。

在你拥有的最快的机器上做这件事(主要是IO方面的,但RAM和CPU也很重要)。无论是数据库服务器,还是插入客户端,请记住,您将付出两倍的IO代价(一次读取,第二次插入)

MySQL Inserting large data sets from file with Java

票数 0
EN

Stack Overflow用户

发布于 2011-09-03 01:00:24

如果您向我们展示查询、表信息、有关服务器的(SHOW CREATE TABLE),信息、MySQL设置以及一些示例数据,我们可以更好地帮助您。

但总的来说:

  • 尝试使用事务:BEGIN TRANSACTION,大量插入,COMMIT将比大量插入更快;
  • 您可以在缓存、临时表或文件中执行插入操作,只有在以后才能将它们加载到永久表中。
  • 您应该注意正确设置服务器,使用正确的缓冲区大小和正确的表存储引擎。
  • 您可以在多个磁盘上对表进行分区,以加快插入速度。
  • 您可以在插入过程中禁用触发器和索引。
  • 如果一次插入多个行,请使用多个值执行一次插入。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7286810

复制
相关文章

相似问题

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