2012-09-22 26 views
0

我开发了一个使用SQLite 3.7 ...数据库的程序,其中有一个相当广泛的写入/读取模块,用于导入,检查和更新数据。这个过程在我的PC上需要14秒钟,Im很高兴能与这个表演一起冲刺。缺少“14秒SQLite数据库”性能的情况

我使用交易的一切与paratetrs我的电脑是英特尔i7与18gig ram。我没有在数据库中设置任何东西。我使用SQLite Expert创建数据库并创建包括表和列的数据结构,并检查是否创建了所有索引。换句话说,它一切OK。

我已经将程序/数据库部署到了2台其他机器上。这14秒的过程需要5分钟以上的其他机器。相同的程序,相同的数据,相同的数据库这些机器是最新的,一个是上周购买的第三代Intel i7,另一个是相当快的,所以硬件不应该成为问题。

我只是不明白问题可能是什么?它是数据库本身吗?除此之外,我还没有设置任何其他的东西。记住我运行相同,需要14秒。难道数据库对我的电脑是“优化的”?所以当我把它给其他人不优化?

我知道我可以关闭j to以获得更好的表现,但这只会加快整个过程并仍然会导致问题。

任何想法都会受到欢迎。

编辑: 我已经在我的7yo Dual Athelon上测试了3gig内存在硬盘上运行XP的程序,程序耗时35秒。那么考虑在可以容忍的范围内。我只是没有得到什么可以使2现代机器需要5分钟? 我有一个想法,它的写作问题,因为使用一个阅读器,他们是较慢,但非常ecceptable。

+0

通常SQLite的速度受磁盘速度(写入)的影响,所以如果你的新盒子有一个SSD而另一个有普通的HD,它可能是影响的原因之一。 – schlenk

+0

我有SSD,但是当我将数据库移动到我的备份正常驱动器的性能是相同的,其他机器之一运行速度猛禽驱动器,感谢您的意见 – user1500403

回答

1
  • SQLite速度受磁盘的随机读取和写入性能影响最大;任何SSD在这方面比任何旋转磁盘都好得多。
  • 每当更改溢出内部缓存时,它们都必须写入磁盘。您应该使用PRAGMA cache_size将缓存增加到默认的2 MB以上。
  • 更改的数据必须在每次事务结束时写入磁盘。确保在一次交易中尽可能多地进行更改。
  • 如果大部分处理涉及临时表或索引,则速度会受主磁盘速度的影响。如果您的机器具有足够的RAM,则可以使用PRAGMA temp_store强制临时数据到RAM。
  • 您应该启用Write-Ahead Logging

注意:默认的SQLite分配没有加密。

+0

感谢您的建议,他们是伟大的,我已经实施了其中的一些作为我的计划的一部分。然而,这个剂量改变了相同的数据库,相同的程序,相同的数据产生相同程序的14秒和5分钟持续时间的问题。我编辑了我的问题,以反映我在7yo双Athelon上测试了3gig ram XP的相同数据,同样花费了25秒。在可接受的范围内。我只是没有得到它如何与现代机器的2用户可以如此缓慢 – user1500403

+0

影响sqlite的Dll,使加密 – user1500403

相关问题