Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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更新百万行_Mysql_Node.js - Fatal编程技术网

优化mysql更新百万行

优化mysql更新百万行,mysql,node.js,Mysql,Node.js,更新1500万条记录的最佳方式是什么? 我需要将一个序列列更新为一个正常的无限制序列,该列包含的索引将变为4096,然后再次变回零 我可以像这样为每一行计算新的sequence_id,但这涉及到在很短的时间内发送1500万个更新请求 db.query("SELECT * from fridgeSensors ORDER BY id ASC", (err, devices, fields) => { devices.forEach(device => {

更新1500万条记录的最佳方式是什么? 我需要将一个序列列更新为一个正常的无限制序列,该列包含的索引将变为4096,然后再次变回零

我可以像这样为每一行计算新的sequence_id,但这涉及到在很短的时间内发送1500万个更新请求

db.query("SELECT * from fridgeSensors ORDER BY id ASC", (err, devices, fields) =>
{
    devices.forEach(device => 
    { 
        db.query("SELECT * from fridgeEntries WHERE deviceID = '?' ORDER BY id ASC",[device.deviceID], (err, entries, fields) =>
        {
            var prev_seq = 0;
            entries.forEach(entry => 
                {
                    var seq = entry.seqNumber || 0;

                seq = (Math.floor(prev_seq/4096)*4096)+seq;
                if(seq < prev_seq) seq += 4096;


                db.query("UPDATE `fridgeEntries` SET `seqNumber`= ? WHERE `id`= ?;",[seq,entry.id]);

                prev_seq = sec;

            });
    });
});

});
我想发一份插页。。使用列和id主键的所有新值进行重复更新,但这意味着发送一个很长的请求,因为请求中的每一行大约有20个字符 “xxxxxxx”、“xxxxxxx”

这意味着有3亿个字符的请求

这两种解决方案听起来都不正确。 你知道该怎么做吗


节点进程和mysql不在同一台服务器上

这是一个快速解决方案。我不想深究顺序计算

创建一个包含deviceID和seq列的表tmp_seq,并通过一个带乘法插入的长查询进行填充,例如插入tmp_seq deviceID,seq值1,2,2,3,7,8。。。 然后执行update friedgeentries set seq=select seq from tmp_seq tmp,其中tmp.deviceID=friedgeentries.deviceID


另外,我假设DeviceID是一个键。否则,您应该使用适当的列。

为什么不在应用程序中执行类似$seqNumber=$id%4096的操作呢?我的直觉是,可以执行一条update语句来管理整个集合。但即便如此,由于回滚逻辑,更新1500万条记录也需要一些时间。@ceejayoz,因为新值不是基于当前行,而是基于前一行row@VincentDuprez$seqNumber=$id%4096+1,那么?