如何提高效率SQLITE 大数据量 *** 作效率

如何提高效率SQLITE 大数据量 *** 作效率,第1张

概述今天有个朋友测试 SQLite,然后得出的结论是:SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! using System.Data; using System.Data.Common; using System.Data.SQLite;

今天有个朋友测试 sqlite,然后得出的结论是:sqlite 效率太低,批量插入1000条记录,居然耗时 2 分钟!

              using         System.Data;         using         System.Data.Common;         using         System.Data.sqlite;         //         创建数据库文件                 file.Delete(        "        test1.db3        "        ); sqliteConnection.Createfile(        "        test1.db3        "        ); DbProvIDerFactory factory         =         sqliteFactory.Instance;         using         (DbConnection conn         =         factory.CreateConnection()) {         //         连接数据库                  conn.ConnectionString         =                 "        Data Source=test1.db3        "        ; conn.open();         //         创建数据表                          string         sql         =                 "        create table [test1] ([ID] INTEGER PRIMARY KEY,[s] TEXT ColLATE NOCASE)        "        ; DbCommand cmd         =         conn.CreateCommand(); cmd.Connection         =         conn; cmd.CommandText         =         sql; cmd.ExecuteNonquery();         //         添加参数                  cmd.Parameters.Add(cmd.CreateParameter());         //         开始计时                  Stopwatch watch         =                 new         Stopwatch(); watch.Start();         //         连续插入1000条记录                          for         (        int         i         =                 0        ; i         <                 1000        ; i        ++        ) { cmd.CommandText         =                 "        insert into [test1] ([s]) values (?)        "        ; cmd.Parameters[        0        ].Value         =         i.ToString(); cmd.ExecuteNonquery(); }         //         停止计时                  watch.Stop(); Console.Writeline(watch.Elapsed); }      

哎~~~~ 一个常识性的错误,我加几行代码 (新增代码标记 "// <-------------------")。

              using         System.Data;         using         System.Data.Common;         using         System.Data.sqlite;         //         创建数据库文件                 file.Delete(        "        test1.db3        "        ); sqliteConnection.Createfile(        "        test1.db3        "        ); DbProvIDerFactory factory         =         sqliteFactory.Instance;         using         (DbConnection conn         =         factory.CreateConnection()) {         //         连接数据库                  conn.ConnectionString         =                 "        Data Source=test1.db3        "        ; conn.open();         //         创建数据表                          string         sql         =                 "        create table [test1] ([ID] INTEGER PRIMARY KEY,[s] TEXT ColLATE NOCASE)        "        ; DbCommand cmd         =         conn.CreateCommand(); cmd.Connection         =         conn; cmd.CommandText         =         sql; cmd.ExecuteNonquery();         //         添加参数                  cmd.Parameters.Add(cmd.CreateParameter());         //         开始计时                  Stopwatch watch         =                 new         Stopwatch(); watch.Start(); DbTransaction trans         =         conn.BeginTransaction();         //         <-------------------                          try         {         //         连续插入1000条记录                          for         (        int         i         =                 0        ; i         <                 1000        ; i        ++        ) { cmd.CommandText         =                 "        insert into [test1] ([s]) values (?)        "        ; cmd.Parameters[        0        ].Value         =         i.ToString(); cmd.ExecuteNonquery(); } trans.Commit();         //         <-------------------                  }         catch         { trans.Rollback();         //         <-------------------                          throw        ;         //         <-------------------                  }         //         停止计时                  watch.Stop(); Console.Writeline(watch.Elapsed); }      

执行一下,耗时 0.2 秒。这差距是不是太大了点?

为什么只是简单启用了一个事务会有这么大的差距呢?很简单,sqlite 缺省为每个 *** 作启动一个事务,那么原代码 1000 次插入起码开启了 1000 个事务,"事务开启 + sql 执行 + 事务关闭" 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因。其实这是数据库 *** 作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。

总结

以上是内存溢出为你收集整理的如何提高效率SQLITE 大数据量 *** 作效率全部内容,希望文章能够帮你解决如何提高效率SQLITE 大数据量 *** 作效率所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1175551.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存