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