Sqlite China  
首页 | 各种语言的sqlite编程 | sqlite研究 |sqlite应用实例与杂谈 | sqlite相关下载 | SQlite论坛
当前位置 : 主页>sqlite研究>列表
SQLite与其他数据库的速度比较(2)
来源:工友 作者:工友 时间:2007-12-21

测试2:在事务处理程序中的 25000 INSERTs

BEGIN;
CREATE TABLE t2(a INTEGER, b INTEGER, c VARCHAR(100));
INSERT INTO t2 VALUES(1,59672,'fifty nine thousand six hundred seventy two');
... 24997 lines omitted
INSERT INTO t2 VALUES(24999,89569,'eighty nine thousand five hundred sixty nine');
INSERT INTO t2 VALUES(25000,94666,'ninety four thousand six hundred sixty six');
COMMIT;
PostgreSQL:    4.900
MySQL:    2.184
SQLite 2.7.6:    0.914
SQLite 2.7.6 (nosync):    0.757

当所有的INSERTs被放入一个事务处理程序时,SQLite不在需要关闭再打开数据库,或者使各个语句间的高速缓存器无效。在结束之前它也不用再执行fsync()s。当解决了这个问题后SQLite 比PostgreSQL和MySQL快很多。.

测试 3: 在编入索引表格中的25000 INSERTs

BEGIN;
CREATE TABLE t3(a INTEGER, b INTEGER, c VARCHAR(100));
CREATE INDEX i3 ON t3(c);
... 24998 lines omitted
INSERT INTO t3 VALUES(24999,88509,'eighty eight thousand five hundred nine');
INSERT INTO t3 VALUES(25000,84791,'eighty four thousand seven hundred ninety one');
COMMIT;
PostgreSQL:    8.175
MySQL:    3.197
SQLite 2.7.6:    1.555
SQLite 2.7.6 (nosync):    1.402

有报告说SQLite在编入索引的表格中表现的不是很好。这个测试证明事实不是这样的,虽然SQLite在创建索引登录时不是很快,但它整体的速度仍是比PostgreSQL和MySQL快。

测试 4:没有索引的 100 SELECTs

BEGIN;
SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<1000;
SELECT count(*), avg(b) FROM t2 WHERE b>=100 AND b<1100;
... 96 lines omitted
SELECT count(*), avg(b) FROM t2 WHERE b>=9800 AND b<10800;
SELECT count(*), avg(b) FROM t2 WHERE b>=9900 AND b<10900;
COMMIT;
PostgreSQL:    3.629
MySQL:    2.760
SQLite 2.7.6:    2.494
SQLite 2.7.6 (nosync):    2.526

这个测试是在一个没有索引的25000登录表格中进行100查询,所以需要浏览一个完整的表格。 SQLite之前的版本在这个测试上比PostgreSQL和MySQL慢,但最新版本的SQLite是比前两者都快的。

测试5: 在一个字符串比较上的100 SELECTs

BEGIN;
SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%one%';
SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%two%';
... 96 lines omitted
SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%ninety nine%';
SELECT count(*), avg(b) FROM t2 WHERE c LIKE '%one hundred%';
COMMIT;
PostgreSQL:    13.409
MySQL:    4.640
SQLite 2.7.6:    3.362
SQLite 2.7.6 (nosync):    3.372

这个测试浏览 100 完整表格,但它使用字符串比较,而不是数字比较。This test still does 100 full table scans but it uses uses string comparisons instead of numerical comparisons. SQLite 比PostgreSQL快三倍,比MYSQL快30%。

Test 6: Creating an index

CREATE INDEX i2a ON t2(a);
CREATE INDEX i2b ON t2(b);
PostgreSQL:    0.381
MySQL:    0.318
SQLite 2.7.6:    0.777
SQLite 2.7.6 (nosync):    0.659

SQLite在创建新索引时是比较慢的,但这并不是什么大问题,因为创建新目录并不常用,希望SQLite之后的版本在这个问题上可以变得快些。

测试 7: 没有索引的5000 SELECTs

SELECT count(*), avg(b) FROM t2 WHERE b>=0 AND b<100;
SELECT count(*), avg(b) FROM t2 WHERE b>=100 AND b<200;
SELECT count(*), avg(b) FROM t2 WHERE b>=200 AND b<300;
... 4994 lines omitted
SELECT count(*), avg(b) FROM t2 WHERE b>=499700 AND b<499800;
SELECT count(*), avg(b) FROM t2 WHERE b>=499800 AND b<499900;
SELECT count(*), avg(b) FROM t2 WHERE b>=499900 AND b<500000;
PostgreSQL:    4.614
MySQL:    1.270
SQLite 2.7.6:    1.121
SQLite 2.7.6 (nosync):    1.162

当有索引的时候,所有这三个数据库都运行的非常快,但SQLite仍是最快的。

测试 8: 没有索引的1000 UPDATEs

BEGIN;
UPDATE t1 SET b=b*2 WHERE a>=0 AND a<10;
UPDATE t1 SET b=b*2 WHERE a>=10 AND a<20;
... 996 lines omitted
UPDATE t1 SET b=b*2 WHERE a>=9980 AND a<9990;
UPDATE t1 SET b=b*2 WHERE a>=9990 AND a<10000;
COMMIT;
PostgreSQL:    1.739
MySQL:    8.410
SQLite 2.7.6:    0.637
SQLite 2.7.6 (nosync):    0.638

对于这个特别的UPDATE测试,MySQL 比PostgreSQL和SQLite慢五或十倍。我不知为什么。 MySQL通常情况下是个非常快的引擎。也许这个问题在之后的版本中被详细说明了。

(阅读次数:
上一篇:SQLite与其他数据库的速度比较(1) 下一篇:SQLite与其他数据库的速度比较(3)
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
§最新评论
热点文章
·SQLite数据库的体系结构
·SQLite与其他数据库的速度
·SQL 语言参考资料
·SQLite语法备忘录
·sqlite 的相关调查1
·嵌入式数据库SQLite的一份
·SQLite在嵌入式Web服务器
·点评主流开源数据库的技术
·基于ARM-Linux的SQLite嵌
·SQLite与其他数据库的速度
·SQLite数据库编程--创建数
·SQL 语法手册
·SQLite Mode 数据库交互的
·SQLITE3 使用总结(3)
·XXTEA加密算法为SQLite 3.
·SQLite 第三版总览(简介)
·SQLite 第三版中的数据类
·用sqlite 执行标准 sql 语
·System.Data.Sqlite 上手
·SQLite编译安装步骤
相关文章
·SQLite Mode 数据库交互的
·SQL 语言参考资料
·SQLite在嵌入式Web服务器
·SQL 语法手册
·System.Data.Sqlite 上手
·SQLite数据库编程--创建数
·SQLite数据库编程--数据库
·SQLite在TorqueScript中的
·关于sqlite_exec回调函数
·用sqlite 执行标准 sql 语

版权Power by DedeCms   后台登陆
Copyright @ 2007