首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • mysql insert速度慢 [已结帖,结帖人:jobwithjava]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-05-15 17:15:28 楼主
    库中有5万多条记录,但有的表字段(type:longtext)特别大(用来存放书的章节,每一章放到一个字段中),我查看整个表对应的文件,已经有900M了,现在通过jdbc(ResultSet,PreparedStatement)一次往表里边插入1000到3000条数据时候,要十多分钟,感觉很慢,有什么方法能提高性能,更快一点啊?

    现在库只有我一人使用,不会因为大量连接导致慢。
    已经对longtext字段做了fulltext索引。
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WWWWA
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      7

      7

    发表于:2008-05-15 17:17:271楼 得分:0
    用事务试试,插入完提交数据
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-15 17:20:562楼 得分:0
    现在已经用了:
    conn.setAutoCommit(false);

    addBatch();
    executeBatch();

    conn.setAutoCommit(true);

    我直接用jdbc完成插入。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunday_bj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-15 17:31:273楼 得分:5
    写成一条sql语句试试呢,insert into tables value (),(),()......
    一条insert比多条insert效率更高
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sunday_bj
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-15 17:33:354楼 得分:5
    insert into table values (),(),()......
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-15 17:40:065楼 得分:0
    INSERT INTO table (column1,column2,column3,column4,column5)VALUES (?,?,?,?,?)

    这是我现在的sql.

    通过问号使用pst.setXXX(index,content)来设置数据,能写成上边的形式吗?
    是这样:
    INSERT INTO table VALUES (?,?,?,?,?)

    ???
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuyann
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-05-15 21:44:356楼 得分:0
    引用======= L3 -  2008-05-15 17:31:27 -  sunday_bj --- 0  ===================================
    写成一条sql语句试试呢,insert into tables value (),(),()......
    一条insert比多条insert效率更高

       
    ==== ====

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuyann
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

    发表于:2008-05-15 21:45:407楼 得分:0
    引用======= L3 -  2008-05-15 17:31:27 -  sunday_bj --- 0  ===================================
    写成一条sql语句试试呢,insert into tables value (),(),()......
    一条insert比多条insert效率更高


    不使用大量数据更新时的事务。 事务内发操作过多的话,会导致效率下降。
       
    ==== ====

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yueliangdao0608
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      7

      3

    发表于:2008-05-16 08:54:328楼 得分:10
    1、set @@autocommit = 0;
    2、建议使用INSERT INTO .. VALUES (),(),...();
    3、删掉你的索引,或者alter table yourtablename disable keys;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 09:13:569楼 得分:0
    不使用大量数据更新时的事务。 事务内发操作过多的话,会导致效率下降。

    我怎么不理解你的意思呢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yueliangdao0608
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 4

      7

      3

    发表于:2008-05-16 09:24:3210楼 得分:0
    引用 9 楼 jobwithjava 的回复:
    不使用大量数据更新时的事务。 事务内发操作过多的话,会导致效率下降。

    我怎么不理解你的意思呢


    意思就是尽量在一个begin end;块内COMMIT;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 09:57:2211楼 得分:0
    刚才把程序和表按各位推荐的方法修改完成,测一下,谢谢啦。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 10:57:3712楼 得分:0
    alter table yourtablename disable keys;  这个起什么作用呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jobwithjava
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-16 14:04:2413楼 得分:0
    哈哈,果然快了很多,我的做法:

    1,insert into tablename set column1=?,...
    2,alert table tablename disable keys;

    还有没有更好的方法啦,,,请教了。过两三天结贴。:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ironlong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-26 17:18:3114楼 得分:0
    alert table tablename disable keys;
    这句话写在存储过程中编译通不过啊,我已经把tablename改成我的表名了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wildlily980
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-26 20:24:2715楼 得分:0
    alert table tablename disable keys;
    这句话写在存储过程中编译通不过啊,我已经把tablename改成我的表名了。
    ---------------------------------------------
    alert 改成alter另外建议查查mysql 语法.
    索引会拖慢insert 速度.
    大量插入数据时,可以先关闭索引,然后再重建索引,这个要比直接insert快。手册上是这么建议的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fcoolx
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-05-27 10:26:4216楼 得分:0
    让索引disable


    引用 12 楼 jobwithjava 的回复:
    alter table yourtablename disable keys;  这个起什么作用呢?
    修改 删除 举报 引用 回复