Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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中插入/更新1-2mb文本字段的速度?_Mysql_Insert_Performance - Fatal编程技术网

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

如何加快MySQL中插入/更新1-2mb文本字段的速度?,mysql,insert,performance,Mysql,Insert,Performance,我写了一个收集网页的机器人,但是有些网页大约是1-2mb(通常是大的,比如pantip.com),所以我现在怎么加速呢 如果遇到超过1mb的页面,每行更新需要4-9秒 提前感谢批量插入时使用加载数据而不是插入 您是否对每条记录使用单独的语句?您可能需要查看批量更新的加载数据填充 快速插入提示: 使用LOAD DATA INFILE语法让MySQL解析并插入它,即使在操作后必须将其弄坏并馈送。 使用此插入语法: 在表(col1,col2)中插入值(val1,val2),(val3,val4) 插入

我写了一个收集网页的机器人,但是有些网页大约是1-2mb(通常是大的,比如pantip.com),所以我现在怎么加速呢

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


提前感谢

批量插入时使用加载数据而不是插入

您是否对每条记录使用单独的语句?您可能需要查看批量更新的加载数据填充

快速插入提示:

使用LOAD DATA INFILE语法让MySQL解析并插入它,即使在操作后必须将其弄坏并馈送。 使用此插入语法:

在表(col1,col2)中插入值(val1,val2),(val3,val4)

插入前删除所有键/索引

在你拥有的速度最快的机器上完成(主要是IO,但RAM和CPU也很重要)。无论是DB服务器,还是插入客户端,请记住,您将支付两倍的IO价格(一次读取,第二次插入)

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

但总的来说:

  • 尝试使用事务:
    开始事务
    ,大量插入,
    提交
    将比大量插入更快
  • 您可以在缓存、临时表或文件中进行插入,然后再将它们加载到永久表中
  • 您应该注意正确设置服务器,使用正确的缓冲区大小和正确的表存储引擎
  • 您可以将一个表划分到多个磁盘上,以加快插入速度
  • 您可以在插入期间禁用触发器和索引
  • 如果一次插入多行,请使用多个值执行一次插入

您需要明确增加允许的最大数据包并重新启动mysql。差不多

[mysqld]
max_allowed_packet=256M
MySQL的无声杀手之一是MySQL数据包,它由

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

根据报告,以下是第1-3段对其进行了解释:

MySQL网络通信代码 在假设 询问总是相当简短, 因此可以发送到和 由服务器在一个块中处理, 在MySQL中称为数据包 术语服务器分配 用于存储临时缓冲区的内存 数据包,它请求足够的 完全适合它。这个架构 需要采取预防措施以避免 服务器内存不足--内存不足 在数据包的大小上,这 选项完成

与……有关的利益守则 此选项可在中找到 sql/net_serv.cc。查看我的网络阅读(),然后按照调用我的真实阅读()进行支付 特别注意 net\u realloc()

此变量还限制长度 许多字符串函数的结果。 请参见sql/field.ccsql/intem\u strfunc.cc了解详细信息

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

结论


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

您可以向我们展示您执行的查询以及
show CREATE TABLE
语句吗?我将尝试此操作,我只设置了32m