`
iihero
  • 浏览: 259782 次
  • 性别: 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();
}
}

分享到:
评论

相关推荐

    易语言SQLite3数据库操作类模块源码

    易语言SQLite3数据库操作类模块源码是一种使用易语言编程实现的SQLite3数据库接口,它通过调用sqlite3.dll动态链接库的API函数,为易语言开发者提供了与SQLite3数据库进行交互的能力。SQLite3是一款轻量级、开源的...

    sqlite3数据库so库_sqlite3数据库_so库_动态库_

    SQLite3是一个轻量级的开源数据库系统,常用于嵌入式设备和移动应用程序,因为它不需要独立的服务器进程,且整个数据库存储在一个文件中。在Android等基于Linux内核的平台上,SQLite3通常以动态库(.so文件)的形式...

    SQLite数据库文件自收缩_sqlite3_

    在提供的压缩包文件“SQLite数据库文件自收缩.pdf”中,可能包含了关于如何使用VACUUM和PRAGMA语句进行数据库文件收缩的详细步骤、注意事项以及最佳实践。通过阅读这份文档,你可以深入理解这两个方法的工作原理,并...

    sqlite3数据库权威指南

    SQLite3是一种轻量级、开源的嵌入式关系数据库管理系统,广泛应用于移动设备、桌面系统以及服务器环境。它不需要单独的服务器进程,并且支持多种编程语言,包括C语言。本指南将深入探讨SQLite3的各个方面,帮助你...

    Sqlite3数据库操作类V2.1最新版

    总之,SQLite3数据库操作类V2.1最新版提供了与SQLite3数据库交互的接口,通过优化和修复已知问题,提高了开发者的工作效率和应用程序的性能。理解和掌握这些知识点对于进行基于SQLite3的开发至关重要。

    关于sqlite3数据库文件格式的分析

    深入理解 SQLite3 数据库文件格式,可以帮助我们更好地了解数据是如何被存储和访问的,这对于数据库性能优化、故障排查和开发自定义的数据库工具非常有用。例如,如果需要恢复损坏的数据库,分析文件格式可以找出...

    SQLite3的性能优化

    本文将主要讲述在嵌入式中使用 SQLite3 时,对相关的数据库的性能如何优化的问题。 一、空间释放 SQLite3 提供了 pragma 指令来实现空间释放。通过设置 auto_vacuum 标记,可以在提交删除事务时自动释放空间。-...

    Sqlite3数据库支持库

    6. 复制和同步:SQLite3提供了wal(Write-Ahead Logging)日志模式,优化了写操作的性能,并支持热备份和数据库复制。 7. 动态类型:SQLite3采用动态类型系统,数据类型根据值自动确定,这增加了灵活性。 8. 支持...

    数据库sqlite 小型数据库

    `sqlite3_analyzer-3.7.1-win32.zip`是SQLite分析工具,用于分析数据库的内部结构,帮助优化数据库性能。它可以提供关于表、索引、B树结构等的详细信息。 `sqlite-3_7_2.zip`和`sqlitedll-3_7_2.zip`可能是SQLite的...

    SQLite3数据库访问代理

    总的来说,SQLiteDBAP为C++开发者提供了一个高效、安全的SQLite3数据库访问解决方案,简化了数据库操作,并且考虑到了性能、安全和易用性等多个方面。通过深入理解和使用这个代理,开发者可以更加专注于应用程序的...

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

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

    SQLite(创建数据库)

    在创建SQLite数据库时,我们通常会经历以下步骤: 1. **安装SQLite库**:首先,你需要在开发环境中安装SQLite的库。对于不同的操作系统,安装方式有所不同。在Linux或macOS中,可以通过包管理器(如apt或brew)进行...

    Sqlite3数据库教程

    例如,在Python中,可以使用sqlite3模块来连接和操作SQLite数据库。 二、SQLite3基本操作 1. 连接数据库:使用`.open()`命令创建或打开数据库文件。 2. 创建表:使用`CREATE TABLE`语句定义表结构,如`CREATE TABLE...

    SQLite3基本数据库操作

    例如,`sqlite3_open()`函数用于打开一个SQLite数据库,而`sqlite3_close()`则用于关闭数据库连接。在创建或打开数据库后,可以使用`sqlite3_exec()`来执行SQL命令,这允许你进行表的创建、删除、更新等操作。 在...

    Windows下SQLite创建数据库的方法

    在Windows系统中创建SQLite数据库主要通过命令行方式实现,具体步骤如下: 1. **打开命令提示符**:按下`Win + R`键,输入`cmd`并回车,打开命令提示符窗口。 2. **切换到SQLite目录**:在命令行中输入`cd`命令,...

    Python SQLite3数据库操作类分享

    Python SQLite3数据库操作类是为了简化对SQLite数据库的交互而设计的一种自定义工具。SQLite3是Python内置的一个轻量级数据库引擎,它允许开发者在无需独立数据库服务器的情况下存储和管理数据。这种操作类的设计...

    sqlite3数据库 linux嵌入式

    首先,SQLite3数据库的核心特性包括其小巧的体积、高效的性能和简单易用的API。由于SQLite3是基于文件的数据库系统,因此在资源有限的嵌入式环境中特别适用。它可以直接嵌入到应用程序中,不需要额外的数据库服务器...

    易语言源码易语言SQLite3数据库操作类V1.66模块源码.rar

    总结,易语言SQLite3数据库操作类V1.66模块源码为易语言开发者提供了便利的SQLite3数据库操作工具,不仅简化了数据库操作的复杂度,还提供了丰富的功能和良好的性能。对于想要深入学习易语言和数据库操作的开发者来...

    sqlite3动态链接数据库

    例如,Android提供了`SQLiteOpenHelper`类来帮助管理和操作SQLite数据库,包括创建数据库和版本管理。 对于动态链接,这意味着SQLite3的函数库(如`sqlite3_open()`、`sqlite3_exec()`等)是在程序运行时加载的,而...

    SQLite3数据库封装

    SQLite3是一种轻量级、开源的关系型数据库管理系统,它不需要单独的服务器进程,可以直接嵌入到各种应用程序中。它的设计目标是提供一个可移植、可靠且高效的数据库解决方案,尤其适用于移动设备和小型应用。在本...

Global site tag (gtag.js) - Google Analytics