由于与这个问题无关的原因,我需要为我的一些项目运行几个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数据库管理器是否存在。
答案 0 :(得分:7)
那里有几个问题:
答案 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这样可以派上用场的东西。