返回:SQLite—系列文章目录
上一篇:用于 SQLite 的异步 I/O 模块(二十四)
下一篇:SQLite—系列文章目录
注意:本文档非常非常旧。它描述了速度比较 SQLite、MySQL 和 PostgreSQL 的古老版本。
这里的数字已经变得毫无意义。此页面仅保留 作为历史文物。
摘要
进行了一系列测试来测量 SQLite 2.7.6、PostgreSQL 7.1.3 和 MySQL 3.23.41。 以下是一般情况 从这些实验中得出的结论:
-
SQLite 2.7.6 明显更快(有时高达 10 或 比默认的 PostgreSQL 7.1.3 安装快 20 倍) 在 RedHat 7.2 上执行最常见的操作。
-
SQLite 2.7.6 通常更快(有时 比 MySQL 3.23.41 快两倍以上 对于最常见的操作。
-
SQLite 执行 CREATE INDEX 或 DROP TABLE 的速度不如 其他数据库。但这并不被视为问题,因为 这些都是不常见的操作。
-
如果将多个操作组合在一起,则 SQLite 效果最佳 单个事务。
此处显示的结果带有以下注意事项:
-
这些测试没有试图衡量多用户性能或 优化涉及多个联接和子查询的复杂查询。
-
这些测试位于相对较小的(大约 14 兆字节)数据库上。 它们不衡量数据库引擎对更大问题的扩展程度。
测试环境
用于这些测试的平台是具有 1GB 或内存的 1.6GHz Athlon 和 IDE 磁盘驱动器。操作系统是 RedHat Linux 7.2,带有 一个库存内核。
默认情况下,使用的 PostgreSQL 和 MySQL 服务器在 红帽 7.2。(PostgreSQL 版本 7.1.3 和 MySQL 版本 3.23.41。 没有努力调整这些引擎。特别注意 RedHat 7.2 上的默认 MySQL 配置不支持 交易。不必支持事务,MySQL 速度优势大,但SQLite仍然能够在大多数上保持自己的优势 测试。
我被告知 RedHat 7.3 中的默认 PostgreSQL 配置 不必要地保守(它被设计成 在具有 8MB RAM 的机器上工作),而 PostgreSQL 可以 通过一些知识渊博的配置,可以更快地运行 调音。 Matt Sergeant 报告说他已经调整了他的 PostgreSQL 安装 并重新运行如下所示的测试。他的结果表明, PostgreSQL 和 MySQL 的运行速度大致相同。对于 Matt's 结果,访问
过时的 URL: http://www.sergeant.org/sqlite_vs_pgsync.html
SQLite在与出现的相同配置中进行了测试 在网站上。它是使用 -O6 优化和 -DNDEBUG=1 开关,它禁用了许多“assert()”语句 在 SQLite 代码中。-DNDEBUG=1 编译器选项大约翻了一番 SQLite的速度。
所有测试均在静止的机器上进行。 使用一个简单的 Tcl 脚本来生成和运行所有测试。 可以在 SQLite 源代码树中找到此 Tcl 脚本的副本 在文件 tools/speedtest.tcl 中。
所有测试中报告的时间代表挂钟时间 在几秒钟内。为 SQLite 报告两个单独的时间值。 第一个值是 SQLite 的默认配置,其中 已打开完整磁盘同步。打开同步 on,SQLite 执行 在关键点进行 fsync() 系统调用(或等效调用) 确保关键数据具有 实际上已写入磁盘驱动器表面。同步 是保证数据库完整性所必需的,如果 操作系统崩溃或计算机意外关闭电源 在数据库更新过程中。第二次报告SQLite是 关闭同步时。关闭同步后, SQLite 有时要快得多,但存在 操作系统崩溃或意外断电可能 损坏数据库。一般来说,同步SQLite 时间用于与 PostgreSQL 进行比较(这也是 synchronous)和异步 SQLite 时间用于 与异步MySQL引擎的比较。