mysql - 我应该使用 SQLite 而不是 MySQL 吗?

标签 mysql performance sqlite

我需要改进一个 PHP-MySQL Web 应用程序,它只使用 MySQL 进行 REPL 操作(和一些搜索功能)。我使用的 99% 的应用程序从未使用过高级 MySQL 功能,例如复制、跨表约束、锁定等。

据我所知,我应该改用 SQLite。

我这样做有什么实际好处吗? 我会看到明显的(>100 毫秒)速度提升吗? 我应该预料到超过 1,000,000 行的表会出现问题吗?

最佳答案

对此没有包罗万象的答案,但有一个要点需要考虑:一个很好的经验法则是,并发度越高,从 MySQL 中获益越多,反之亦然.

这意味着在数据库请求永远不会并发的情况下,您可能会通过使用 SQlite 看到加速,但我怀疑它会在 100 毫秒的数量级。

这背后的原因是(非常粗略):

在数据库服务器环境中,例如 MySQL、PostgreSQL、MS SQL、Oracle 等,一个专用进程(或一组进程)专门接触数据库文件——重要的部分是专用 .这意味着并发问题可以在进程中解决。

在基于文件的数据库中,例如 SQlite、MS Access(Jet 引擎)和 friend ,多个进程将在彼此不知情的情况下访问 DB 文件——这意味着并发问题必须通过将它们写入数据库或帮助文件。这通常要慢得多且不那么健壮。作为交换,数据库客户端(Web 应用程序)和数据库服务器(进程中)之间的通信开销是不存在的。

编辑

在评论之后我想说得更清楚,我说的是并发写入,而不是并发读取。并发读取不变的数据集并不是一个难题 - 它根本不需要任何锁定。

关于mysql - 我应该使用 SQLite 而不是 MySQL 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12254326/

相关文章:

mysql - pdo 是否转义语句?

mysql - 从 MySQL JSON 数组中获取不同的值

.net - 在 .NET 中读取和解析文件 - Performance For Hire

python - SQLAlchemy:唯一约束失败错误,但未设置唯一约束

database - 为Windows和Linux编译64位sqlite

sqlite - Ionic2:从 URL 获取图像并保存到 native 存储

php - MySQL 选择用户座右铭

c++ - 将图像加载到opengl纹理qt c++

java - 重构类以提高效率

mysql - POST完成后如何从MySQL获取数据