加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite在Windows中的性能调试

发布时间:2020-12-12 23:39:39 所属栏目:百科 来源:网络整理
导读:SQLite在Windows中的性能调试 作者:康小芳 来源: www.sqlite.com.cn 在Windows中的性能调试 为了使SQLite在大型数据库和小型用户系统里飞快地运行,我花费了大量时间,我遇到了许多可以加快它们程序运行的方法。 作为侧面注释,这些大型数据库有300万行之

SQLite在Windows中的性能调试

作者:康小芳 来源:
www.sqlite.com.cn

在Windows中的性能调试

为了使SQLite在大型数据库和小型用户系统里飞快地运行,我花费了大量时间,我遇到了许多可以加快它们程序运行的方法。

作为侧面注释,这些大型数据库有300万行之多,但SQLite仍可以很好的处理这么大量的数据。

我也把"包含在内,被动去做",如果你读的足够多(或者欺骗,只是跳到最后一个对象)。它是不能处理数据的,这是我的错误,所以我有义务来向大家澄清这一点。

这主要发生在Windows和Delphi环境下,但在其它情景下也许是个优点,请查阅SQLite 3.1.0:

直接使用SQLite

我建议你直接尝试使用SQLite,直接在数据库里执行程序要比使用一些假地址或查询函数好一些。(因为SQLite没有这些函数, 有能力的程序员通常需要生成复杂的和代价昂贵的CPU/HDD编码来模仿BDE的功能性)。

我建议你一定到改变你编码的方法,因为从我的经历来看,从DLL导出的函数使用起来很简单,可以满足你的需要,虽然它也许和某些人使用Delphi DBE的方法有些许的不同。

我自己发现SqliteWrappers 对我们有很大帮助,它使我们可以很快地把SQL送到数据库,并马上得到我们所需要的结果。当然,这决定于你要做什么,和你对你所导出的DLL函数有多大信心。

如果你想往数据库里附加,插入,或者更新数据,下面的SQL语句:


DB.ExecSQL('INSERT OR REPLACE INTO tableName (Field1,Field2,Field 3) ' +
'VALUES (Value1,Value2,Value3)');

可以像下面一样代替全部的旧数据:


IF Locate(Field1,Value1) THEN
UpdateTableFunction() // ...Lots of code here
ELSE
InsertIntoTableFunction(); // ...even more code HERE

保持代码是精确的并加快速度。记住在更新SQL时换Begin Transactions和End Transactions。为了达到很高的效能,在一个事物处理程序中,我们运行上千个SQL INSERTS。

这不是说使用componants不好,使用它们可以大大加快你开发程序的时间。即使你正在使用componants,你也一定要看看通过 SQL测试SQlite(-> ExecSQL)。一个好的和谐的SQL语句能详细而精确的满足你的需要,可以比一般的解决办法更快。

2:Indexes 和数据库结构是非常重要的。

当然,一个普通的数据库遵循法则一,但这是一个SQL数据库,添加你所需要的索引是非常有必要的,即使是添加一个DON'T你不需要的索引也是很重要的。首先用你的判断力来计划一下数据库,使每个事都有一个功能,如果你不需要,则不必要它。

一个操作键有两个索引(例如复合和编入索引)可以减慢数据插入的速度, 当检索时它不会给你带来什么好处,因为SQLite将忽略这些。它将以最小的程度增加你的数据库的规模,即使速度对你来说不是什么大问题。

有一些其它的Wiki页面,比如PerformanceTuning它具体的讲述了这个问题。

3:页面规模也很重要

Windows NTFS系统默认的群的规格似乎是4096字节。把SQLite数据库的页面规格也设置成4096字节将加快数据库在系统中的速度,当然簇也要相同。

(注意,我认为Linux的群的规格是1024,这是新的SQLite数据库所默认的。)

判断你的群的规格的最简单的办法是用碎片整理程序整理驱动器,然后分析。这里有相关的讲解。

为了设置SQLite的页面规格,你需要创造一个新的EMPTY数据库,然后做


PRAGMA page_size=4096;

现在创建表格immediately(如果你想关闭SQLite指令行程序,重新打开数据库, 页面规格就被重新设置成1024)。在创建第一个表格前一定要设置页面的规格。

一旦表格建成,就不能改变页面规格了。

键入:


PRAGMA page_size;

将告诉你当时正在设置什么。

4:成群的索引

SQLite不支持成群的索引(简单来说,就是索引使数据库中的数据存入时索引的顺序是什么样,数据就怎样放置)

这意味着,如果你的索引是整数顺序,记录就会把数据库中的数据按整数顺序安排,1然后2然后3。

你不能生成一个成群的索引,但是你可以按顺序选择你的数据,这样任何历史数据都是整齐的安排好的。当然,当数据库成熟的时候,你丢失的数据,它都可以帮助你。

有人邮寄了下面的例子,这是个好例子,如果你有个WIBBLE表格,你想分析它的主要区段,如果有顺序那就好办啦。使用命令行工具,你可以通过下面指导创建一个家的群:


create table wibble2 as select * from wibble;
delete from wibble;
insert into wibble select * from wibble2 order by key;
drop table wibble2;

5:作为读这篇文章的收获,这里有个不智能的事情需要提醒你。

要非常非常谨慎你的数据库的名字,特别是extension

例如,如果你把你所有的数据库命名为extension .sdb( SQLite Database,好名字吧?我认为是,无论我怎么选都行)但你会发现SDB extension已然和APPFIX PACKAGES相关联了。

现在是个非常精彩的部分,APPFIX是Windows XP认可的可执行的程序,它将(强调我所说的ADD THE DATABASE TO THE SYSTEM RESTORE FUNCTIONALITY

这意味着,每次你往数据库里输入任何数据,Windows XP系统都认为一个可执行程序已经被改变,它将把你整个800 meg的数据库恢复到目录。

我认为DB或DAT是可取的。

整个系统所列的恢复的监控的文件名的扩展名可在下面网页找到: ¤http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sr/sr/monitored_file_extensions.asp

祝你成功

Chris Schirlinger

chrisZEROSPAM@ZEROSPAMtimezulu.com.au (remove ZEROSPAM to email)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读