如何加快MySQL中插入/更新1-2mb文本字段的速度?
我写了一个收集网页的机器人,但是有些网页大约是1-2mb(通常是大的,比如pantip.com),所以我现在怎么加速呢 如果遇到超过1mb的页面,每行更新需要4-9秒如何加快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) 插入
提前感谢批量插入时使用加载数据而不是插入 您是否对每条记录使用单独的语句?您可能需要查看批量更新的加载数据填充 快速插入提示: 使用LOAD DATA INFILE语法让MySQL解析并插入它,即使在操作后必须将其弄坏并馈送。 使用此插入语法: 在表(col1,col2)中插入值(val1,val2),(val3,val4) 插入前删除所有键/索引 在你拥有的速度最快的机器上完成(主要是IO,但RAM和CPU也很重要)。无论是DB服务器,还是插入客户端,请记住,您将支付两倍的IO价格(一次读取,第二次插入) 如果您向我们展示查询、表信息(
show CREATE table
)、服务器信息、MySQL设置以及一些示例数据,我们可以更好地帮助您
但总的来说:
- 尝试使用事务:
,大量插入,开始事务
将比大量插入更快李>提交
- 您可以在缓存、临时表或文件中进行插入,然后再将它们加载到永久表中
- 您应该注意正确设置服务器,使用正确的缓冲区大小和正确的表存储引擎
- 您可以将一个表划分到多个磁盘上,以加快插入速度
- 您可以在插入期间禁用触发器和索引
- 如果一次插入多行,请使用多个值执行一次插入
[mysqld]
max_allowed_packet=256M
MySQL的无声杀手之一是MySQL数据包,它由
了解MySQL数据包是什么可能会澄清这一点
根据报告,以下是第1-3段对其进行了解释:
MySQL网络通信代码
在假设
询问总是相当简短,
因此可以发送到和
由服务器在一个块中处理,
在MySQL中称为数据包
术语服务器分配
用于存储临时缓冲区的内存
数据包,它请求足够的
完全适合它。这个架构
需要采取预防措施以避免
服务器内存不足--内存不足
在数据包的大小上,这
选项完成
与……有关的利益守则
此选项可在中找到
sql/net_serv.cc。查看我的网络阅读(),然后按照调用我的真实阅读()进行支付
特别注意
net\u realloc()
此变量还限制长度
许多字符串函数的结果。
请参见sql/field.cc和
sql/intem\u strfunc.cc了解详细信息
根据这种解释,批量插入将相当快地加载/卸载MySQL数据包。当max_allowed_数据包对于到达它的给定数据负载来说太小时,尤其如此
结论
在大多数MySQL安装中,我通常将其设置为256M或512M。您应该在包含BLOB和文本字段的数据加载中尝试更大的值。您可以向我们展示您执行的查询以及
show CREATE TABLE
语句吗?我将尝试此操作,我只设置了32m