Javascript 在最短的时间内从数据库获取数据

Javascript 在最短的时间内从数据库获取数据,javascript,mysql,node.js,performance,Javascript,Mysql,Node.js,Performance,我正在使用mysql和node.js。我有一个按钮“加载以前的聊天记录”来加载两个用户的聊天记录。 当我点击该按钮时,它会以每秒12行的速度给出结果(手动测试)。我如何才能使其快速? 这是我的密码 在服务器端- socket.on('chatHistory', function(data){ var count=0; connection.query("SELECT * FROM chatRecord WHERE uniqueRoomId = '"+data.roomId+"'

我正在使用mysql和node.js。我有一个按钮“加载以前的聊天记录”来加载两个用户的聊天记录。 当我点击该按钮时,它会以每秒12行的速度给出结果(手动测试)。我如何才能使其快速? 这是我的密码

在服务器端-

socket.on('chatHistory', function(data){
    var count=0;
    connection.query("SELECT * FROM chatRecord WHERE uniqueRoomId = '"+data.roomId+"' ", function(err, result, fields) {
        if (err) throw err;


        for (var j in result) 
        {
            if (rows3.hasOwnProperty(j)) count++;
        }
        var k=0;
        if(result[0])
        {
            socket.emit('chatHistoryMaintain', {result:result,sum:count,nickname:data.nickname});
        }
    });
    });
客户端代码-

socket.on('chatHistoryMaintain', function(data){
    for(i=0;i<data.sum;i++)
    {
        if(data.result[i].sender==data.nickname) 
        {
          $('#chat-messages ul').append('<li class="marker"><div class="fl sender">'+nickname+' : </div><div class="fl text1">'+data.result[i].msg+'</div></li>');
        }
        else 
        {
          $('#chat-messages ul').append('<li class="marker"><div class="fl receiver">'+nickname+' : </div><div class="fl text">'+data.result[i].msg+'</div></li>');
        }
     }
});

为了让它更快,你首先必须弄清楚它为什么慢

  • 用于确定查询是进行行扫描还是使用索引,以及使用哪些索引
  • 如果您对解释输出感到厌烦,请尝试使用相同的
    WHERE
    子句执行
    selectcount(*)…
    。如果速度太慢,索引可能就是问题所在
  • 检查从cli客户端执行查询是否也那么慢

  • 如果问题出在执行行扫描的查询中,请调整索引。如果mysql在查找数据时没有问题,而是返回数据,那么不要等待所有30k记录通过套接字传输,然后一批返回它们。请考虑使用异步获取行(毕竟是No.js)!一次在node.js进程内存中放置大量记录不是一个好主意,您可以尝试监视进程的内存使用情况。

    可能有几个原因。uniqueRoomId列上有索引吗?chatRecord有多少行?您的数据库使用哪个引擎?你能解释一下你的问题吗?你有关于服务器硬件的详细信息吗?是的uniqueRoomId有索引。chatRecord有30000行。我已经编辑了数据库引擎详细信息的问题。关于服务器硬件,你想知道什么?我指的是你桌子上使用的引擎,很抱歉误会了。30000行不应该给数据库太大的压力。您是否尝试通过PMA或Workbench直接在DB中执行查询?如果速度更快,您的问题可能不是查询和/或数据库,而是数据的后处理。
    >     +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    >     | Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
    >     +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
    >     | PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
    >     | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
    >     | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
    >     | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO      
    > |
    >     | MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
    >     | CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
    >     | ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
    >     | FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
    >     | InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
    >     +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+