我在nodejs上编写了一个函数,用于选择1.5亿条记录,处理数据并使用以下方法更新这些相同的1.5亿条记录
UPDATE 'table' SET value1='somevalue' WHERE idRo2 = 1;
每一行的单个更新连接发送一个查询字符串,允许对db连接进行multipleStatements查询。
我遇到了多个错误
我想我可能没有使用正确的技术或编程技术。
*编辑:
我需要做的数据处理是获取'wholeApiResponse‘列值,解析该字符串,然后将解析的值插入到新添加的列中(askPrice、lastPrice、lowPrice、highPrice、volumePrice、platformTimestamp),最后通过从现有字符串中添加新值来修改现有行。
发布于 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:告诉我们value1
和idRo2
的真正名称。这可能会导致一些具体的建议。
与数据类型有关的小问题。缩小表的大小将有助于提高性能。
INT SIGNED
的上限为20亿美元。150米就快到了。盯着任何AUTO_INCREMENTs
。INT
for idCurrencyPair
可能在浪费空间。(INT
占用4个字节;数据类型较小)DOUBLE
会导致舍入错误。它需要8个字节。考虑一下DECIMAL(...)
。platformTimestamp DOUBLE
-嗯?LONGTEXT
很少被使用?我们应该讨论更好的存储方法。https://dba.stackexchange.com/questions/288870
复制相似问题