DISQLite的一些优化心得

  这段时间正在做的项目是DISQLite的数据读写,基本的逻辑都写完了,但是性能方面不行。查了好几天资料,看帮助文档,得到了一些性能优化的心得,给大家分享一下:

先说写的部分:

  1:写数据的时候手动开启事务

  FDataBase.StartTransaction();
  try
    //do something
    FDataBase.Commit;
  except
    FDataBase.Rollback;
  end;
   这样的话,写入的数据会得到极大的提升。StrartTransaction有三种模式:ttDeferred,ttImmediate,ttExclusive。但这模式MS跟写入的速度无关,跟数据库的锁的状态有关,详细内容可以参考这篇http://www.cnblogs.com/frankliiu-java/archive/2010/05/31/1748160.html。

  2:clearBinds + Reset比Close快。

  这个有点白痴了,由于刚开始的时候没仔细看帮助文档,批量插入数据的时候都是Open,然后Close,结果也比较慢。后来的时候改成:

  oStmt := FDataBase.Prepare16(strInsert);
  try
    oStmt.Open;
    for I := 0 to 1000 do
    begin
      //do Insert
      oStmt.Step;
      oStmt.Clear_Bindings;
      oStmt.Reset;
    end;
  finally
    oStmt.Free;
  end;
打开一个新的连接肯定会比重置一个连接要慢。

3)设置CacheSize的值。

  默认的值是1024,可以考虑设置得大一点,如果不考虑内存的增加的话,网上找了找,有人建议设置成8000,具体的数值可以根据不同的应用,自己测试后再定。

4)autoAutoVacuum不要设置

  设置后,速度会慢,网上有的说的是效率会比较低。建议还是不要设置为True。

 5:执行PRAGMA synchronous = off,可以提升一点速度。

读的部分:

  1:给外键创建索引。

  如果外键的取值比较多的话,给它创建索引,速度会得很大的提升。取值比较少的话,可以没必要加。这样的话,执行Select语句的时候会快很多,写的时候创建索引,对写的速度基本没有影响。

 2:SQLite有空值,读的时候,用Column_Text(AIndex) = '' 或者Column_bytes(AIndex) = 0来判断是否为空,要比采用Column_str16(AIndex) = ''等要快很多。

 3:Select语句中,尽量不要用Select * From XXX,可能的话,还是只写所需要的字段。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[说明] DiSQLiteApi.dcu 文件根据实际开发环境在包内进行选择 本版本的 ASqlite 是基于 livu999 大侠的修改版继续魔改 原帖地址:http://download.csdn.net/download/ilvu999/6369053 本版本只支持 D2009 以上的 Unicode 版本的 Delphi 原作者在主要单元文件已经说明清楚了,老版本 Delphi 请绕道 为了照顾 XE2 下使用的朋友,故最后做了兼容 再照顾一下 DBGrid,令其不再显示 (MEMO) 另外做了兼容,在 XE8 开发环境及 64 位平台下通过基本测试            katar1024 (网名:阿龙) 2017-08-22 大改支持 TWideMemo,在此解决乱码问题 修正启用 SQLiteDateFormat 的情况下读取非正规日期字符串引起异常的 bug 查询语句中表名和字段名用中括号 [] 引括,可以使用 Index 之,等保留字段名 删除属性 CharacterEncode,一律按默认的 Uft-8 格式存取字符串 删除属性 DriverDll,已经启用 SQLite 静态库方式编译并链接,不需携带 dll 使用 DISQlite 的静态库编译,版本 3.8.3,兼容性和稳定性均良好 2017-08-23 插入和更新操作只针对已修改的字段进行处理和提交,提高执行效率 插入记录后,同步读取库中的数字和日期默认值,对取值自动分配 id 有意义 所有调试记录代码全部加了条件编译块控制,减小体积,提高调度效率 优化类型数据存取分支代码,减少体积,提高读写效率 去除初次读取数据 100 字节大小缓冲区的限制,防止字符串乱码 其它性能优化 其它 bug 修复 2017-08-24 修正设计器属性框中 Active 属性设置为 True,但运行时未打开查询的 bug ftString、ftWideString、ftMemo、ftWideMemo 等字符串字段通过乱码测试 Memo 字段添加显示功能,控件不再显示(MEMO)或(WIDEMEMO) Memo 字段支持 AsInteger、AsDataTime 等数据功能(设计器预定义的字段无效) 2017-08-25 修改关键属性时自动关闭数据连接 TransactionType、TempStore, DefaultSynchronous 等属性从字符串值修改为枚举值 修正 TypeLess 功能 添加 TASQLiteBaseQuery 一些关键属性在设计器中改变后自动关闭查询的功能 修正 Filtered 属性在设计器中改变后,但结果没变的 bug PS: 本来想弄个批处理提交功能的(BatchedUpdates 或 CachedUpdates), 在某些场合很实用,但最近改的问题太多了,改得好累,等下次真正用到了再补上 对 SQLite 的初恋蛮深的,但不得不吐槽,想说爱它真的很不容易
[说明] DiSQLiteApi.dcu 文件根据实际开发环境在包内进行选择 本版本的 ASqlite 是基于 livu999 大侠的修改版继续魔改 原帖地址:http://download.csdn.net/download/ilvu999/6369053 本版本只支持 D2009 以上的 Unicode 版本的 Delphi 原作者在主要单元文件已经说明清楚了,老版本 Delphi 请绕道 为了照顾 XE2 下使用的朋友,故最后做了兼容 再照顾一下 DBGrid,令其不再显示 (MEMO) 另外做了兼容,在 XE8 开发环境及 64 位平台下通过基本测试            katar1024 (网名:阿龙) 2017-08-22 大改支持 TWideMemo,在此解决乱码问题 修正启用 SQLiteDateFormat 的情况下读取非正规日期字符串引起异常的 bug 查询语句中表名和字段名用中括号 [] 引括,可以使用 Index 之,等保留字段名 删除属性 CharacterEncode,一律按默认的 Uft-8 格式存取字符串 删除属性 DriverDll,已经启用 SQLite 静态库方式编译并链接,不需携带 dll 使用 DISQlite 的静态库编译,版本 3.8.3,兼容性和稳定性均良好 2017-08-23 插入和更新操作只针对已修改的字段进行处理和提交,提高执行效率 插入记录后,同步读取库中的数字和日期默认值,对取值自动分配 id 有意义 所有调试记录代码全部加了条件编译块控制,减小体积,提高调度效率 优化类型数据存取分支代码,减少体积,提高读写效率 去除初次读取数据 100 字节大小缓冲区的限制,防止字符串乱码 其它性能优化 其它 bug 修复 2017-08-24 修正设计器属性框中 Active 属性设置为 True,但运行时未打开查询的 bug ftString、ftWideString、ftMemo、ftWideMemo 等字符串字段通过乱码测试 Memo 字段添加显示功能,控件不再显示(MEMO)或(WIDEMEMO) Memo 字段支持 AsInteger、AsDataTime 等数据功能(设计器预定义的字段无效) 2017-08-25 修改关键属性时自动关闭数据连接 TransactionType、TempStore, DefaultSynchronous 等属性从字符串值修改为枚举值 修正 TypeLess 功能 添加 TASQLiteBaseQuery 一些关键属性在设计器中改变后自动关闭查询的功能 修正 Filtered 属性在设计器中改变后,但结果没变的 bug PS: 本来想弄个批处理提交功能的(BatchedUpdates 或 CachedUpdates), 在某些场合很实用,但最近改的问题太多了,改得好累,等下次真正用到了再补上 对 SQLite 的初恋蛮深的,但不得不吐槽,想说爱它真的很不容易
### 回答1: disqlite3 pro是一种基于SQLite数据库的高级工具。它提供了一系列方便的功能和性能优化,可以帮助用户更好地管理和处理SQLite数据库。 首先,disqlite3 pro具有更高的性能表现。它使用了一系列性能优化技术,例如缓存管理、索引优化和并发控制等,以提供更快的查询速度和更高的并发处理能力。这对于处理大规模数据和高并发访问的场景非常有益。 此外,disqlite3 pro还提供了更丰富的功能。它支持更多的SQL语法和函数,可以进行更复杂的数据查询和处理操作。同时,它还提供了一些高级功能,例如数据加密、数据压缩和备份恢复等,用以增强数据的安全性和可靠性。 除此之外,disqlite3 pro还提供了更便捷的开发工具和API。它可以与多种编程语言和开发框架进行集成,方便开发人员进行数据读写和操作。同时,它还提供了一套丰富的命令行工具和图形界面,用以辅助用户进行数据库管理和查询操作。 总之,disqlite3 pro作为一种高级的SQLite数据库工具,通过提供更高的性能、丰富的功能和便捷的开发工具,可以帮助用户更好地管理和处理SQLite数据库。无论是在性能要求高的应用中,还是在开发过程中,都可以选择disqlite3 pro来提升工作效率和数据处理能力。 ### 回答2: disqlite3 pro是一种高效的SQLite数据库管理工具。它是基于SQLite的开源项目,具有强大的功能和性能。 首先,disqlite3 pro提供了用户友好的图形界面,使得数据库的管理变得简便。它支持对数据库的创建、删除、备份、还原等操作,而无须编写繁琐的SQL语句。通过简单的操作,用户可以轻松地管理自己的数据库。 其次,disqlite3 pro具有强大的查询功能。它支持复杂的查询操作,可以根据用户的需求进行数据筛选、排序、统计等操作。同时,它还提供了图形化的结果展示,使得用户能够直观地查看查询结果。 除此之外,disqlite3 pro还提供了数据库性能优化的功能。它可以对数据库进行性能分析,找出潜在的性能瓶颈,并给出优化建议。通过对数据库的性能进行优化,可以加快查询速度,提升系统的响应能力。 此外,disqlite3 pro还支持数据的导入导出操作。用户可以将数据从其他数据库导入到disqlite3 pro中,也可以将disqlite3 pro中的数据导出到其他数据库中。这样的灵活性和兼容性,使得disqlite3 pro成为了广泛应用于跨数据库操作的工具。 总的来说,disqlite3 pro是一款功能强大、性能出色的SQLite数据库管理工具。它的用户友好的界面、强大的查询功能、性能优化功能以及数据的导入导出功能,使得用户能够方便地管理和优化数据库,提高工作效率。 ### 回答3: Disqlite3 Pro是一个功能强大的数据库管理工具。它是基于SQLite数据库引擎开发的,可以帮助用户更方便地操作和管理SQLite数据库。 Disqlite3 Pro具有以下特点和优势: 1. 直观的界面:Disqlite3 Pro提供了直观友好的用户界面,使用户可以轻松进行数据库管理工作。无论是新手还是有经验的用户,都能快速上手。 2. 多种操作功能:Disqlite3 Pro支持多种数据库操作功能,包括创建、编辑和删除数据库、表和索引等。用户可以通过简单的操作完成复杂的数据库管理任务。 3. SQL查询支持:Disqlite3 Pro内置了强大的SQL语句查询功能,用户可以通过简单的命令编写查询语句,快速检索数据库中的数据。同时,它还提供了语法高亮和代码补全等功能,大大提高了查询的效率和准确性。 4. 数据导入导出:Disqlite3 Pro支持将数据库中的数据导出为CSV、Excel等格式,还可以将外部数据文件导入到数据库中。这样用户可以方便地与其他数据处理工具进行数据交换和共享。 5. 数据库优化功能:Disqlite3 Pro还提供了一些数据库优化功能,如索引管理和空间回收等。这些功能可以提高数据库的性能和存储效率,并减少资源的消耗。 总之,Disqlite3 Pro是一个功能强大、操作简便的数据库管理工具。它能够帮助用户更高效地管理和操作SQLite数据库,提供了多种功能和优化选项,适用于各种数据库管理需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值