`
aigo
  • 浏览: 2675563 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

SQLite优化建议

    博客分类:
  • DB
阅读更多

原文:http://stackoverflow.com/questions/1711631/how-do-i-improve-the-performance-of-sqlite

Several tips:

  1. Put inserts/updates in a transaction
  2. Consider a less paranoid journal mode (pragma journal_mode). There is NORMAL, and then there OFF which can significantly increase insert speed if you're not too worried about the database possibly getting corrupted if the OS crashes. If your application crashes the data should be fine.
  3. Playing with page sizes makes a difference as well (PRAGMA page_size). Having larger page sizes can make reads and writes go a bit faster as larger pages are held in memory. Note that more memory will be used for your database.
  4. If you have indices, consider calling CREATE INDEX after doing all your inserts. This is significantly faster than creating the index and then doing your inserts.
  5. You have to be quite careful if you have concurrent access to SQLite, as the whole database is locked when writes are done, and although multiple readers are possible, writes will be locked out.
  6. Take advantage of saving space...smaller databases go faster. For instance, if you have key value pairs, try making the key an INTEGER PRIMARY KEY if possible, which will replace the implied unique row number column in the table.
  7. If you are using multiple threads, you can try using the shared page cache, which will allow loaded pages to be shared between threads, which can avoid expensive I/O calls.

I've also asked similar questions here and here.

 

 

原文:http://www.sqlite.org/faq.html#q19

(19) INSERT is really slow - I can only do few dozen INSERTs per second

Actually, SQLite will easily do 50,000 or more INSERT statements per second on an average desktop computer. But it will only do a few dozen transactions per second. Transaction speed is limited by the rotational speed of your disk drive. A transaction normally requires two complete rotations of the disk platter, which on a 7200RPM disk drive limits you to about 60 transactions per second.

Transaction speed is limited by disk drive speed because (by default) SQLite actually waits until the data really is safely stored on the disk surface before the transaction is complete. That way, if you suddenly lose power or if your OS crashes, your data is still safe. For details, read about atomic commit in SQLite..

By default, each INSERT statement is its own transaction. But if you surround multiple INSERT statements with BEGIN...COMMIT then all the inserts are grouped into a single transaction. The time needed to commit the transaction is amortized over all the enclosed insert statements and so the time per insert statement is greatly reduced.

Another option is to run PRAGMA synchronous=OFF. This command will cause SQLite to not wait on data to reach the disk surface, which will make write operations appear to be much faster. But if you lose power in the middle of a transaction, your database file might go corrupt.

分享到:
评论

相关推荐

    SQLiteStudio-2.1.5 非常好用的SQLite编辑工具

    10. **性能优化**:通过分析SQL查询性能,提供优化建议,提升数据库运行效率。 在实际应用中,SQLiteStudio对于开发者、数据分析师或者需要处理SQLite数据库的任何用户来说,都是一个不可或缺的工具。无论是进行...

    SQLite网络化工具包

    5. **文档**:详细说明了如何安装、配置、使用和维护网络化SQLite系统,包括安全性和性能优化建议。 使用SQLite网络化工具包,开发者可以构建分布式应用,实现数据的跨设备共享和同步。例如,一个移动应用可以使用...

    windows下sqlite安装使用和性能优化及设置

    ### Windows 下 SQLite 安装与使用详解 #### 一、SQLite 概述 SQLite 是一款轻量级的数据库管理系统,采用 C 语言...这些优化措施能够帮助开发者更好地利用 SQLite 的强大功能,提高应用程序的运行效率和用户体验。

    Sqlitetools v1.0

    7. 性能优化:对于大型数据库,Sqlitetools可能会提供一些性能优化选项,如批量操作、查询优化建议等,以提高数据处理效率。 8. 兼容性:Sqlitetools v1.0应能在多种操作系统上运行,如Windows、Mac OS X和Linux,...

    sqlite3.dll 64位

    64位版本的sqlite3.dll是为了在64位操作系统上运行而优化的,它可以更好地利用64位系统的内存资源和处理能力,提高数据处理效率,尤其对于处理大量数据或需要高性能的数据库应用来说更为重要。32位和64位版本的主要...

    sqlite 3.7.8 官方开发文档

    SQLite 3.7.8是该系统的一个版本,它在2011年发布,提供了许多功能改进和性能优化。这份官方开发文档是开发者理解和操作SQLite 3.7.8的重要参考资料。 1. **SQLite架构与概念** SQLite基于SQL标准,但同时包含了...

    SQLiteManager 3.9.1 包含注册码 与sqlite3.exe

    此外,它还提供了诸如数据库分析、性能优化、数据可视化等功能,帮助开发者和DBA高效地管理和维护SQLite数据库。 sqlite3.exe是SQLite的命令行实用程序,允许用户通过输入SQL命令来与数据库进行交互。虽然没有图形...

    sqliteTools

    此外,还有查询计划分析和性能优化建议,对数据库性能有深入理解的用户可以借此提升查询速度。 4. **导入与导出**:可以方便地将数据从 CSV、Excel 等格式导入到 SQLite,或者将 SQLite 数据导出为其他格式,实现与...

    sqlite3 v3.8.6

    1. **性能提升**:SQLite3 v3.8.6可能对查询优化器进行了优化,使得复杂的SQL查询能够更快地执行。这可能涉及到索引的更有效利用,以及查询计划的优化,从而减少数据读取时间和内存使用。 2. **稳定性增强**:此...

    sqlite3_doc文档

    8. **性能调优**:提供性能分析和优化建议,如使用覆盖索引、适当的数据类型选择等。 9. **附录**:可能包含了编码规范、常见问题解答(FAQ)以及与其他数据库系统的比较等。 通过这些文档,开发者可以深入理解...

    sqlite-dll-3.7.14

    SQLite是一个开源的、轻量级的数据库引擎,广泛应用于...然而,随着时间的推移,更现代的SQLite版本(如5.x)可能提供了更多的特性和性能提升,因此,对于新项目,通常建议使用最新稳定版本以获得最佳支持和安全性。

    SQLiteStudio编辑器

    在性能优化方面,SQLiteStudio提供了一些工具,如执行计划分析和索引分析,帮助用户找出可能的性能瓶颈,并给出相应的建议。这对于提升数据库性能至关重要。 在安全性方面,SQLiteStudio支持设置数据库文件的访问...

    sqlite实例的演示

    如果你的程序需要长时间使用数据库,建议不要立即关闭连接,而是等到不再需要时再关闭。 创建和执行SQL语句是SQLite的核心功能。下面是如何在C++中执行一个简单的SQL命令: ```cpp void executeSql(sqlite3* db, ...

    SQLite Maestro Professional 16.11.0.7

    在性能优化方面,SQLite Maestro提供了一些实用工具,如查询分析器,可以评估查询性能并给出优化建议。同时,它还可以生成数据库性能报告,帮助用户找出可能的瓶颈。 最后,SQLite Maestro支持SQLite的最新版本,...

    图书:使用SQLite

    6. **性能优化**:探讨如何通过索引、查询优化、内存管理和日志配置来提升SQLite的性能。 7. **移动应用开发**:针对Android和iOS等移动平台,介绍如何将SQLite整合进应用程序,以及处理离线数据存储的最佳实践。 ...

    delphi静态连接sqlite3.5.4

    描述中的 "研究sqlite的delphier可以看看" 建议对 Delphi 和 SQLite 结合感兴趣的开发者深入学习这一主题。这可能涉及到如何在 Delphi 应用程序中集成 SQLite,如何执行 SQL 查询,以及如何处理数据库事务、错误和...

    sqlite-3.6.23.1

    在使用前,建议阅读官方文档以了解如何配置、编译和使用SQLite。 总之,“sqlite-3.6.23.1”是一个可靠且功能丰富的数据库引擎,适用于需要在本地存储数据的应用场景,如移动应用、桌面应用或嵌入式系统。其轻量级...

    SQLite 3.7.3 DOCS.rar

    10. **优化指南**:文档还会提供性能调优的建议,包括索引策略、查询优化等。 这个CHM文件对于SQLite初学者和开发者来说是一份宝贵的资源,无论你是想快速查找某个功能的用法,还是深入理解SQLite的内部工作原理,...

    sqlite 数据库载入文件

    截至现在,SQLite已经发展到较新的版本,例如3.36或更高,建议使用最新稳定版本以获取最佳体验。 在实际应用中,创建和管理SQLite数据库通常涉及以下步骤: 1. **安装库**:根据所使用的开发环境,安装相应的...

    SQLite3模块修改版.rar

    对于不熟悉SQLite3的开发者,建议先学习SQLite3的基本概念和SQL语言,以便更好地利用这个模块。 总之,“SQLite3模块修改版.rar”提供了易语言开发者一个集成SQLite数据库功能的便捷途径,通过分析源码,可以提升...

Global site tag (gtag.js) - Google Analytics