PHPQ致力于分享PHP,做PHP中文资讯第一站点。我们关心的不仅仅是PHP!涵盖PHP教程、PHP安装、PHP下载、PHP源码、PHP论坛各个方面。

PhpQ.net - PHP资讯第一站点

匿名投稿 投稿指南 RSS订阅 PHP资讯

SQLite与其他数据库的速度比较(三)

这篇文档是一篇旧文档。它把老版的SQLite的速度和老版的MySQL和 PostgreSQL的速度进行了对比。读者被热诚地邀请贡献更先进的速度对比在SQLite Wiki. 这里的数字非常老,几乎没什么意义。在更新之前仍使用这篇文档只是为了证明SQLite不是停滞不前的。
测试9: 有索引的25000 UPDATEs
BEGIN;
UPDATE t2 SET b=468026 WHERE a=1;
UPDATE t2 SET b=121928 WHERE a=2;
... 24996 lines omitted
UPDATE t2 SET b=35065 WHERE a=24999;
UPDATE t2 SET b=347393 WHERE a=25000;
COMMIT;
SQLite执行结果数据:
PostgreSQL:   18.797
MySQL:   8.134
SQLite 2.7.6:   3.520
SQLite 2.7.6 (nosync):   3.104
在这个测试中,最近的2.7.0 版 SQLite和MYSQL运行速度一样,但是最近对SQLite的优化使它速度比UPDATEs快一倍。

测试10: 有索引的25000 text UPDATEs
BEGIN;
UPDATE t2 SET c='one hundred forty eight thousand three hundred eighty two' WHERE a=1;
UPDATE t2 SET c='three hundred sixty six thousand five hundred two' WHERE a=2;
... 24996 lines omitted
UPDATE t2 SET c='three hundred eighty three thousand ninety nine' WHERE a=24999;
UPDATE t2 SET c='two hundred fifty six thousand eight hundred thirty' WHERE a=25000;
COMMIT;
SQLite执行结果数据:
PostgreSQL:   48.133
MySQL:   6.982
SQLite 2.7.6:   2.408
SQLite 2.7.6 (nosync):   1.725
2.7.0 版本的SQLite过去和MYSQL运行速度一样,但现在2.7.6 版的SQLite的速度是MYSQL的两倍,是PostgreSQL的20倍。
在这个测试中,PostgreSQL也很慢,一个有经验的管理者可以通过调试服务器使之运行的快些。

Test 11: 来于SELECT的INSERTs
BEGIN;
INSERT INTO t1 SELECT b,a,c FROM t2;
INSERT INTO t2 SELECT b,a,c FROM t1;
COMMIT;
SQLite执行结果数据:
PostgreSQL:   61.364
MySQL:   1.537
SQLite 2.7.6:   2.787
SQLite 2.7.6 (nosync):   1.599
在这个测试中,异步的SQLite比MYSQL慢(MYSQL似乎特别擅长INSERT...SELECT语句)。 PostgreSQL引擎仍然是非常慢的, 61秒中的大部分时间被用来等待磁盘I/O。

测试 12: 没有索引的DELETE
DELETE FROM t2 WHERE c LIKE '%fifty%';
SQLite执行结果数据:
PostgreSQL:   1.509
MySQL:   0.975
SQLite 2.7.6:   4.004
SQLite 2.7.6 (nosync):   0.560
在这个测试中,The synchronous version of同步版本的 SQLite是这组中最慢的,但异步版本的SQLite是最快的。不同的是,它需要额外的时间去执行fsync()。

测试 13: 有索引的DELETE
DELETE FROM t2 WHERE a>10 AND a<20000;
SQLite执行结果数据:
PostgreSQL:   1.316
MySQL:   2.262
SQLite 2.7.6:   2.068
SQLite 2.7.6 (nosync):   0.752
这个测试非常重要,因为在这里PostgreSQL比MySQL要快。SQLite比前两者都要快。

测试 14: 一个大 DELETE之后的一个大INSERT
INSERT INTO t2 SELECT * FROM t1;
SQLite执行结果数据:
PostgreSQL:   13.168
MySQL:   1.815
SQLite 2.7.6:   3.210
SQLite 2.7.6 (nosync):   1.485
一些老版的SQLite(2.4.0 以前的版本)在执行完DELETEs及新INSERTs后明显慢下来,但在这个测试中我们可以看到,这个问题已经被解决了。

测试 15: 一个大的DELETE及许多小INSERTs
BEGIN;
DELETE FROM t1;
INSERT INTO t1 VALUES(1,10719,'ten thousand seven hundred nineteen');
... 11997 lines omitted
INSERT INTO t1 VALUES(11999,72836,'seventy two thousand eight hundred thirty six');
INSERT INTO t1 VALUES(12000,64231,'sixty four thousand two hundred thirty one');
COMMIT;
SQLite执行结果数据:
PostgreSQL:   4.556
MySQL:   1.704
SQLite 2.7.6:   0.618
SQLite 2.7.6 (nosync):   0.406
SQLite通常总是会在一个事务处理程序中执行INSERTs,这也许就是为什么在这个测试中SQLite通常比其它数据库快很多的原因。

测试 16: DROP TABLE
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
SQLite执行结果数据:
PostgreSQL:   0.135
MySQL:   0.015
SQLite 2.7.6:   0.939
SQLite 2.7.6 (nosync):   0.254
SQLite在执行撤销表格这一操作时比其它数据库要慢一些。 这也许是因为当SQLite撤销一个表格的时候,它必须全面检查并清除数据库文件中的记录。与之不同的是,MySQL和 PostgreSQL分别的文件夹来代表每个表格,所以如果它们想撤销一个表格,它们只需删除一个文件,这当然要快一些了。
但是,撤销表格并不是一个常用的操作,所以SQLite慢一些也不会有什么问题。


参考文档
SQLite与其他数据库的速度比较
SQLite与其他数据库的速度比较(二)
SQLite与其他数据库的速度比较(三)
Tags:SQLite   数据库   比较   速度  
责任编辑:kimi
关于我们 - PHP资讯 - 投稿指南 - 文章归档 - PHP教程
- -