您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

如何提高效率SQLite大数据量操作效率

2025/11/17 23:37:47发布27次查看
今天有个朋友测试 sqlite,然后得出的结论是:sqlite 效率太低,批量插入1000条记录,居然耗时 2 分钟!为什么只是简单启用了一个
今天有个朋友测试 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   {
    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     {
      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 执行 + 事务关闭 自然耗费了大量的时间,这也是后面显示启动事务后为什么如此快的原因。其实这是数据库操作的基本常识,大家要紧记,不好的代码效率差的不是一点半点。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product