`
iihero
  • 浏览: 249444 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sqlite3数据库的性能问题报告

阅读更多

使用jdbc测了一下sqlite3的插入数据的效率,使用整体事务与不使用整体事务,差别非常明显。 cpu: 1G, 内存:512MB
使用整体事务:1000000条记录,需要93秒钟。
使用逐个插入提交事务:1秒钟只能处理20条记录。
启动程序时把java堆最大空间设大一些,不然可能出现内存不够的异常。
java -Xmx256M TestConn
测试后的结果显示如下:

以下是测试代码:
import java.sql.*;

public class TestConn {
void test(){
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
System.out.println(new java.util.Date());
try {
Class.forName("SQLite.JDBCDriver");
conn = DriverManager.getConnection(
"jdbc:sqlite:/f:/test.db", //jdbc:oracle:thin:@hex:1521:ORCL
"",
"");
conn.setAutoCommit(false);
stmt = conn.createStatement();
stmt.executeUpdate("create table hehe(id number, name varchar(32))");
System.out.println("建表hehe成功!");
for (int i=0; i<1000000; i++)
{
stmt.executeUpdate("INSERT INTO hehe VALUES("+i+", '我爱中国"+i+"')");

}

conn.commit();
System.out.println("不建索引查询:");
System.out.println(new java.util.Date());

rset = stmt.executeQuery("SELECT id, name FROM hehe where id > 499999 and name ='我爱中国500001'");
if (rset.next()){
System.out.println(rset.getInt("id"));
System.out.println(rset.getString("name"));
}
if (rset!=null){ rset.close(); rset = null; }

System.out.println(new java.util.Date());

System.out.println("建索引:");
System.out.println(new java.util.Date());
stmt.executeUpdate("CREATE INDEX hehe_idx on hehe(id)");
stmt.executeUpdate("CREATE INDEX hehe_idx2 on hehe(name)");
conn.commit();
System.out.println(new java.util.Date());

System.out.println("建索引后的查询:");
System.out.println(new java.util.Date());
rset = stmt.executeQuery("SELECT id, name FROM hehe where id > 499999 and name = '我爱中国500001'");
if (rset.next()){
System.out.println(rset.getInt("id"));
System.out.println(rset.getString("name"));
}
System.out.println(new java.util.Date());
stmt.executeUpdate("drop table hehe");
System.out.println("删除表hehe成功!");
conn.commit();

System.out.println(new java.util.Date());

} catch(ClassNotFoundException cnfe) {
System.out.println("Can't find class for driver: "+cnfe.getMessage());
System.exit(-1);
} catch (SQLException e){
System.out.println(e.getMessage());
System.exit(-1);
} finally
{
try {
if (rset!=null) rset.close();
stmt.close();
conn.close();
} catch (SQLException e) {

}
}
}

public static void main(String[] args) {
TestConn conn = new TestConn();
conn.test();
}
}

分享到:
评论

相关推荐

    UniDAC自动创建有密码的SQLite数据库(支持修改密码)

    附件:SQLite3.dll 功能: 1.用纯脚本创建一个带密码的SQLite3数据库(默认文件名db.db,密码123) 2.用纯脚本创建一个表,并打开,可在Dbgrid中修改 3.修改SQLite3数据库的密码 备注:在不替换SQLite3.dll的前提下,本...

    sqlite3数据库使用概述

    SQLite3的性能出色,能够处理大量数据并支持复杂查询。它具有高效的索引机制,适用于各种应用场景,从嵌入式系统到大型服务器应用。学习SQLite3对于Linux编程者而言,是一项有价值的技能。它易于学习和使用,拥有...

    SQLite3的性能优化

    主要讲述在嵌入式中使用SQLite3时,对相关的数据库的性能如何优化的问题

    sqlite3性能优化源代码 数据插入 开启事务 执行准备 性能提升 每秒百万条数据写入

    sqlite3写入性能优化,使用事务结合执行准备的方法,极大地提升写入性能, 使用内存数据库(:memory:)模式高速写入,最后转存磁盘,也可提升部分性能

    sqlite3.24数据库支持多线程

    这次编译的dll支持多线程,但是要支持多线程内部是有互斥锁的,所以会有性能损失。但是可以通过 S3_配置 () 来自己选择模式:。#SQLITE_配置_单线程 为单线程模式。#SQLITE_配置_多线程 各个线程使用不同的连接和...

    数据库转sqlite数据库

    3、如果access库中 自增长的字段autoId不是为主键,而name字段为主键 在sqlite中,如果字段为自增长,则必须为主键,碰到这种情况,程序是这样处理的 字段autoId: 因为是自增长字段,必须设置为主键 字段name:...

    JAVA在SQLite嵌入式数据库中的应用.rar

    SQLite 作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为...同时侧重研究如何应用Java 连接SQLite数据库,并开发基于SQLite 的应用程序。 ......

    SQLite数据库工具 SQLiteSpy

    SQLite数据库工具 SQLiteSpy。SQLiteSpy 是一款快速且紧凑的图形用户界面(GUI)工具,用于管理 SQLite 数据库。它的设计目标是使得 SQLite 数据库的开发和维护变得更加简单和轻松。SQLiteSpy 提供了一个直观的用户...

    常用内存数据库的比较

    什么是内存数据库,常用内存数据库,SQLite最佳试用场合,哪些场合适合使用其他的关系型数据库,内存数据库之比较,性能测试

    delphi操作sqlite数据库 简易发货软件

    用delphi操作sqlite数据库写了个简易发货软件 sqlite数据库想必有玩缓存数据库的都知道 本地化的一个小型db 性能堪比xls和access

    怎样写SQL语句可以提高数据库的性能

    怎样写SQL语句可以提高数据库的性能怎样写SQL语句可以提高数据库的性能

    一种内存数据库到文件数据库的数据同步方法及系统

    一种内存数据库到文件数据库的数据同步方法,包括:A、内存数据库将事务日志记录写入日志缓存区;...本发明提供一种内存数据库到文件数据库的数据同步方法及系统,在不影响内存数据库的性能的前提下,实现数据同步。

    SQLite4Unity包下载

    SQLite4Unity 是 Unity 中的一个 SQLite 数据库操作工具库,用于在 Unity 项目中访问 SQLite 数据库。它提供了许多可用于创建,查询和更新 SQLite 数据库的功能,而无需编写复杂的 SQL 查询语句。 SQLite4Unity 是...

    易语言-sqlite3.24数据库支持多线程

    这次编译的dll支持多线程,但是要支持多线程内部是有互斥锁的,所以会有性能损失。 但是可以通过 S3_配置 () 来自己选择模式: #SQLITE_配置_单线程 为单线程模式 #SQLITE_配置_多线程 各个线程使用不同的连接和准备...

    Android编程之SQLite数据库操作方法详解

    本文实例讲述了Android SQLite数据库操作方法。分享给大家供大家参考,具体如下: SQLite and Android SQLite简介 SQLite是一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能。此外,...

    sqlite3-ocaml:OCaml绑定到SQLite3数据库

    Sqlite3是一个自包含,无服务器,零配置的事务型SQL数据库引擎,在许多情况下均具有出色的性能。这些绑定的编写方式使之能够与旧的(版本2)SQLite及其OCaml包装器ocaml-sqlite友好地共存。用法完整记录了文件src/...

    core-data和sqlite3性能对比demo

    ◆ Core Data是一个功能强大的层,位于SQLite数据库之上, 它避免了SQL的复杂性,能让我们以更自然的方式与数据库进行交互 ◆ 这样看来它跟Sqltie3在速度上是没有可比性的。Sqlite3肯定要快! ◆ 但是快多少?...

    C#多线程读写sqlite

    多线程读写sqlite数据库,同步锁,计时测试读写性能,

    vb6 sqlite 事务方式数据库编程

    无需部署即可使用的sqlite演示程序程序用vb6编写,包含sqlite的基本操作及性能测试,直接调用sqlite.dll中的api函数。性能测试中演示了插入操作使用事务提交及不使用事务提交方式在时间上的巨大差异。演示及性能测试...

Global site tag (gtag.js) - Google Analytics