sqlite3和mysql之间有速度差异吗?

时间:2008-11-05 06:12:27

标签: mysql ruby-on-rails database sqlite

经过大量的谷歌搜索后,我一直在想,mysql和sqlite3之间的好处/差异是什么。我主要希望在将我的开发数据库移动到生产数据库时发生减速,尽管我想这主要发生在我的代码中。有谁知道性能上的主要差异是什么?在那儿?或者你能指出一些比较两者的文献?

6 个答案:

答案 0 :(得分:26)

我希望你的问题不是在讨论在开发和生产中使用不同的数据库系统。

如果您在开发和生产中使用不同的DB,请不要。不同的数据库引擎表现不同,会导致出现意外错误。尽量让您的开发系统尽可能接近生产(提示:在VM中运行)

SQLite和MySQL都是正确上下文中的优秀产品。了解他们的能力。

SQLite的:

  • 使用客户端应用程序运行进程
  • 无网络功能
  • 由于这个
  • ,查询开销非常低
  • 容易查询的速度可能相当快,因为​​IPC,系统调用和数据复制的次数较少。
  • 非常有限的并发性(我认为它是一个作者或多个读者,每个数据库文件)

MySQL的:

  • 更多功能
  • 选择引擎(InnoDB为许多工作负载提供了很好的功能)
  • 对存储,备份,还原等的更多控制
  • 支持网络 - 允许其在大规模应用中使用
  • 更好的并发性 - InnoDB引擎具有MVCC,这意味着读者不会阻止编写者,编写者也不会阻止读者。即使旧的MyISAM引擎也具有表级锁定,而不是整个数据库的sqlite。
  • 可能是复杂查询的更好的优化者

简而言之,你无法真正比​​较它们。 SQLite作为嵌入式数据库非常流行 - Firefox 3里面有一个。

在SQLite中,您仍然坚持将数据库存储在本地光盘上(当然,还有网络光盘,如果有的话)。如果要扩展Web应用程序,则可能必须使用基于服务器的数据库,例如MySQL。

答案 1 :(得分:9)

SQLite是一个嵌入式数据库引擎,但它在与应用程序相同的过程中运行。 MySQL,是一个在自己的进程中运行的数据库服务器。

SQLite不会浪费应用程序服务器进程和数据库服务器进程之间的处理和带宽打包请求。它只是解析请求,找出要做的事情(查询计划),并在SQLite数据库文件上调用fopen()并执行查询。

当您的网站受到大量并发请求的攻击时,MySQL会更好,并且您需要额外的线程和排队来正确地提供所有请求。

如果您的网站每天点击次数超过100000次,或者您的数据库大小不超过约25 GB,则SQLite可能是最佳使用的数据库。 SQLite的另一个优点是,在额外的进程或数据库服务器稀缺的情况下,您经常可以轻松使用它。查看http://www.sqlite.org/whentouse.html

你也可以用SQLite做其他事情。查看http://www.squidoo.com/sqlitehammer以获取有关SQLite的其他见解。

答案 2 :(得分:4)

这是一个简单的方法:Sqlite是Notepad,MySQL是MS Word。两者基本上都是一样的,但它们的核心非常非常不同,它们用于不同的目的。

Sqlite是一个很好的数据库,通常足够好,而MySQL是一个复杂得多的系统,但是这种复杂性带来了力量。

我还必须建议不要在开发和生产中使用不同的数据库。使用与客户使用的不同的东西是愚蠢的。如果您在开发过程中需要加速,那么您的客户在使用您的程序时可以使用相同的加速。

答案 3 :(得分:3)

SQLite是最快的

SQLite只能通过一个连接访问,使用文件系统存储所有内容,不使用任何服务器。

速度快,重量轻。实际上应该是MySQL的两倍。

SQLite和MySQL不用于相同的任务

对于简单的应用程序,您将使用SQLite,而不需要存储超过5个Go的数据。 E.G:一个本地议程,一个音乐播放器,嘲笑甚至是一个你将嵌入USB密钥的网站演示。

或者,需要为更大的项目选择Mysql,因为它可以处理大量数据并同时访问。您将它用于具有用户访问,Intranet等的网站

答案 4 :(得分:1)

这在不同的语言中可能有所不同,但在PHP中,如果您只是偶尔修改数据库,那么SQLite是很好的。这是因为为了确保完整性,每次修改数据库时都会锁定SQLite文件,进行更改并将其写入文件,然后解锁文件。在此期间,任何其他进程都无法访问数据库,并且它的实现取决于其他进程的请求是否在此期间失败或阻塞。

答案 5 :(得分:-1)

实际上我发现自己需要重新投入我的程序的数据库逻辑(已经在生产中),因为SQlite的一个错误是当面对相对大量的数据和操作时,它只是无法锁定数据库并离开直到程序关闭,这意味着每个程序数据进度都是暂时的,然后每个添加都会丢失。可爱啊?

迁移到MySql,我明白了,我尝试了一些测试速度差异的东西,并在280'500记录的桌子上出现了像安全查询一样的“UPDATE table SET column1 = column1”,SQlite需要大约13秒,而MySql只用了1秒。

我仍然不是数据库大师,但选择是一个简单的考虑因素:如果您需要一个简单的内存存储来限制数据量,复杂性和并发性(例如小型实用程序或运行时没有关键数据)然后SQlite会没问题,否则当你需要稳定性,并发性,大量数据,查询的复杂性时,那么你的数据库将是MySql。

关于开发和制作中的不同数据库我不同意,但如果你这样做,你肯定有充分的理由。