首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >处理超过1.5亿行MySql的最佳方法

处理超过1.5亿行MySql的最佳方法
EN

Database Administration用户
提问于 2021-03-28 22:41:16
回答 1查看 979关注 0票数 0

我在nodejs上编写了一个函数,用于选择1.5亿条记录,处理数据并使用以下方法更新这些相同的1.5亿条记录

代码语言:javascript
运行
复制
UPDATE 'table' SET value1='somevalue' WHERE idRo2 = 1;

每一行的单个更新连接发送一个查询字符串,允许对db连接进行multipleStatements查询。

我遇到了多个错误

  • 错误:连接丢失:服务器关闭了连接。
  • RangeError:无效字符串长度。
  • 杀灭过程。

我想我可能没有使用正确的技术或编程技术。

*编辑:

我需要做的数据处理是获取'wholeApiResponse‘列值,解析该字符串,然后将解析的值插入到新添加的列中(askPrice、lastPrice、lowPrice、highPrice、volumePrice、platformTimestamp),最后通过从现有字符串中添加新值来修改现有行。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2021-03-29 05:21:00

大的更新(和删除)是有问题的。

计划A:避免大的更新。如果value1在idRo2 = 1时始终应该是“somevalue”,那么不要将其存储在表中,而是将其存储在其他地方,并使用JOIN。然后,与其检查150米行,倒不如换1行。

计划B:一次以1K行的块进行更新。这样可以避免超时和其他一些潜在的问题。详细信息:http://mysql.rjweb.org/doc.php/deletebig#deleting_在……里面_分块。即使是10K也会有问题,因此我推荐1K。无论如何,超过1K将进入“递减回报”。

计划C:告诉我们value1idRo2的真正名称。这可能会导致一些具体的建议。

与数据类型有关的小问题。缩小表的大小将有助于提高性能。

  • INT SIGNED的上限为20亿美元。150米就快到了。盯着任何AUTO_INCREMENTs
  • 类似地,INT for idCurrencyPair可能在浪费空间。(INT占用4个字节;数据类型较小)
  • DOUBLE会导致舍入错误。它需要8个字节。考虑一下DECIMAL(...)
  • platformTimestamp DOUBLE -嗯?
  • 我敢打赌LONGTEXT很少被使用?我们应该讨论更好的存储方法。
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/288870

复制
相关文章

相似问题

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