Javascript 在最短的时间内从数据库获取数据
我正在使用mysql和node.js。我有一个按钮“加载以前的聊天记录”来加载两个用户的聊天记录。 当我点击该按钮时,它会以每秒12行的速度给出结果(手动测试)。我如何才能使其快速? 这是我的密码 在服务器端-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+"'
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(*)…
。如果速度太慢,索引可能就是问题所在李>
如果问题出在执行行扫描的查询中,请调整索引。如果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 |
> +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+