MySQL vs SQLite + UNIQUE索引

时间:2009-05-15 04:08:45

标签: mysql database sqlite

由于与这个问题无关的原因,我需要为我的一些项目运行几个SQLite数据库而不是更常见的MySQL,我想知道SQLite在速度和方面与MySQL的比较有关磁盘I / O的性能(数据库将托管在USB 2.0笔式驱动器中)。

我已经阅读了http://www.sqlite.org/speed.html的数据库速度比较页面,我必须说我对SQLite的性能感到惊讶,但由于这些基准测试有点旧,我正在寻找更新的基准测试(SQLite 3 vs MySQL 5),再次我主要担心的是磁盘性能,而不是CPU / RAM

此外,由于我没有那么多使用SQLite的经验,我也很好奇它是否与InnoDB MySQL引擎中的TRIGGER(更新,删除)事件类似。我也找不到任何方法将一个字段声明为像MySQL那样独特,只有PRIMARY KEY - 有什么我想念的吗?

作为最后一个问题,我想知道一个好的(最好是免费的或开源的)SQLite数据库管理器是否存在。

3 个答案:

答案 0 :(得分:7)

那里有几个问题:

  1. 就磁盘I / O限制而言,我不认为数据库引擎会产生很大的不同。可能有一些小问题,但我认为这主要是数据库是否可以像您的应用程序那样快速读/写数据。由于您将使用与MySQL或SQLite相同数量的数据,我认为它不会有太大变化。
  2. SQLite支持触发器:CREATE TRIGGER Syntax
  3. SQLite支持UNIQUE约束:column constraint definition syntax
  4. 要管理我的SQLite数据库,我使用的是Firefox加载项SQLite Manager。这很好,做我想做的一切。

答案 1 :(得分:2)

  

就磁盘I / O限制而言,我不会想象数据库引擎会这样做   很多不同。

在Mysql / myISAM中,数据存储为UNORDERED,因此RANGE读取ON PRIMARY KEY理论上需要发出几个HDD SEEK操作。

在Mysql / InnoDB中,数据按PRIMARY KEY排序,因此RANGE读取ON PRIMARY KEY将使用一个DISK SEEK操作完成(理论上)。

总结一下: myISAM - 数据写入HDD无序。如果pri键不是AUTO INCREMENT唯一字段,则慢PRI-KEY范围读取。

InnoDB - 订购数据,对闪存驱动器不利(因为在插入=附加写入后需要重新排序数据)。 PRI KEY范围读取速度非常快,写入速度很慢。

InnoDB不适合闪存。由于搜索非常快(因此您不会从重新排序数据中获得太多好处),维护订单所需的额外写入会损坏闪存。

myISAM / innoDB对传统和闪存驱动器有很大的不同(我不知道SQLite是什么),但我宁愿使用mysql / myisam。

答案 2 :(得分:1)

我实际上更喜欢使用SQLiteSpy http://www.portablefreeware.com/?id=1165作为我的SQLite界面。 它支持像REGEXP这样可以派上用场的东西。