首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在最短的时间内从数据库获取数据

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

Stack Overflow用户
提问于 2014-04-30 19:41:15
回答 1查看 194关注 0票数 0

我使用的是mysql和node.js。我有一个按钮‘加载以前的聊天’加载两个用户的聊天。当我点击那个按钮时,它给出的结果是12行/秒(手动测试).How我能让它更快吗?以下是我的代码

在服务器端-

代码语言:javascript
复制
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});
        }
    });
    });

客户端代码-

代码语言:javascript
复制
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行/秒时,我如何才能对其进行更多的优化?我做错了什么?

下面是我的数据库引擎的详细信息

代码语言:javascript
复制
>     +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
>     | 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        |
>     +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
EN

回答 1

Stack Overflow用户

发布于 2014-04-30 21:06:40

为了让它更快,你首先必须找出为什么它会变慢。

  1. 使用EXPLAIN来确定您的查询是否正在执行行扫描或使用索引,以及使用了哪些索引。
  2. 如果您对EXPLAIN输出感到困扰,请尝试使用相同的SELECT COUNT(*)...子句执行WHERE。如果它也很慢,那么索引可能是问题所在。
  3. 检查从cli客户端执行查询是否也是最慢

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23387151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档