热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql插入数据100条用8s怎么办,为什么啊。。

用js写的Mysql插入数据100条用8s怎么办啊啊啊啊啊代码如下:functioninsertComment(comments,weiboid){v
用js写的    Mysql 插入数据 100条用8s 怎么办啊啊啊啊啊  

代码如下:

function insertComment(comments, weiboid){
    var conn = new Jaxer.DB.MySQL.Connection({
        HOST: 'localhost',
        PORT: '3306',
        USER: 'root',
        PASS: 'admin',
        NAME: 'sinaweibo',
        CLOSE_AFTER_EXECUTE: true
    });
    var count = 0, statement = "", f_statement = "",u_statement = "", times = 0, ttimes = 0,utimes = 0;//初始化
    for (var one in comments) {
        var f_count = 0, b_count = 0;
        var c_time = new Date(comments[one].created_at);
        var i_time = new Date();//当前时间
       f_count = Is_Num2(comments[one].followers_count);
        c_time = formatDate2(c_time);
        i_time = formatDate2(i_time);
        if (getCommentData(comments[one].id)) {
            if (times == 0) {
                Statement = "('" + c_time + 
"','" + i_time + 
"','" + comments[one].id + 
"','" + comments[one].mid +
"','" + comments[one].idstr +
                "','" + comments[one].text +
"','" + comments[one].userid +
"','" + comments[one].username +
"','" + comments[one].followers_count +
"','" + comments[one].weiboid +

                "')";
                times = 1;
            }
            else {
                statement += ",('" +
                c_time +
"','"+ 
i_time +
                "','" +
                comments[one].id +
                "','" +
                comments[one].mid +
                "','" +
                comments[one].idstr +
                "','" +
                comments[one].text +
"','" +
comments[one].userid +
"','" +
comments[one].username +
"','" +
comments[one].followers_count +
"','" +
comments[one].weiboid +
                "')";
            }
            count++;//评论数
        }

    }
    try {
 [code=Javascript][code=Javascript]
[/code]if (times != 0) {//至少有开头
var result = conn.execute("insert into comment(created_at,insert_at, commentid, mid, idstr, text,userid,username,followers_count,weiboid) values " + statement);
}
return count;

catch (e) {
count = -1;
return count;

}

}[/code]

9 个解决方案

#1


1  是否是网络延迟的问题
2  是否是程序跑的慢
3   数据库端你可以设置innodb_flush_log_at_trx_commit=0来提高插入速度

#2


很一般的语句,并无复杂之处,极有可能 是你的程序问题。
建议你单独在数据库执行一番。

看看是否while,for有不合理之处。

#3


引用 1 楼 rucypli 的回复:
1  是否是网络延迟的问题
2  是否是程序跑的慢
3   数据库端你可以设置innodb_flush_log_at_trx_commit=0来提高插入速度

用firebug看,从网络获取时间0.2s左右,已经设置innodb_flush_log_at_trx_commit=0,
单纯post对insertComment请求用10s左右,所以问题就在这段代码了,但是代码已经很简单了,应该只会与
for (var one in comments), if (getCommentData(comments[one].id))这两者有关了,前者for循环无法避免,后者是一个根据id查找数据库中是否有改数据,有的话就进行下次循环,没有的话,拼接sql,我需要怎么改才能提高速度呢?大神帮帮忙,多谢多谢!!

#4


引用 2 楼 bonlog 的回复:
很一般的语句,并无复杂之处,极有可能 是你的程序问题。
建议你单独在数据库执行一番。

看看是否while,for有不合理之处。

post对insertComment请求用10s左右,应该就是这段代码的问题了,可是for (var one in comments), if (getCommentData(comments[one].id))这两者,前者for循环无法避免,后者是一个根据id查找数据库中是否有改数据,有的话就进行下次循环,没有的话,拼接sql,我需要怎么改才能提高速度呢?帮帮忙啦,小女子不胜感激~

#5


getCommentData(comments[one].id), 
估计 就是慢在这儿, 看看能不能提前获取这些id对应的commentdata?

#6


你echo $sql(拼接的,)再exit退出循环。
把得到的sql 在mysql 执行一番,
若时间在

8s/你的循环次数,
则说明是数据库的事,

自己调试一番

#7


引用 6 楼 bonlog 的回复:
你echo $sql(拼接的,)再exit退出循环。
把得到的sql 在mysql 执行一番,
若时间在

8s/你的循环次数,
则说明是数据库的事,

自己调试一番


还是if那个浪费时间了,不是数据库的事,程序上改改了思路,已经解决啦~哈哈

#8


在一个数据库连接中插入100条数据,你不要插入一条就关闭一条数据库连接,哪样每次都要重新建立连接,Socket是很慢的,还有PHP中的MYSQL扩展库提供了一个函数可以用于批量插入数据,你查下手册

#9


引用 5 楼 iihero 的回复:
getCommentData(comments[one].id), 
估计 就是慢在这儿, 看看能不能提前获取这些id对应的commentdata?

版主,说的对,已经解决啦~

推荐阅读
author-avatar
狠毒的水瓶_617_223_489_321
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有