我使用的是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>');
}
}
});
我如何优化它,因为我的应用程序提供@ 12行/秒的结果而Skype的速度高达1560行/秒?我做错了什么?
以下是我的数据库引擎的详细信息
> +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
> | 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 |
> +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
答案 0 :(得分:1)
为了使速度更快,首先必须找出为什么它在第一时间变慢
SELECT COUNT(*)...
子句执行WHERE
。如果它也很慢,索引可能就是问题。 如果问题出在查询中进行行扫描,请调整索引。如果mysql找到数据没有问题,而是返回它,不要等待所有30k记录通过套接字泵送,以便一次性返回它们。考虑使用行的异步提取(毕竟是它的node.js!),如official doc中所述。在node.js进程内存中放入大量记录不是一个好主意,您可以尝试监视进程的内存使用情况。