最近因工作需要采用SQLITE作为数据库,但是实测发现性能并不理想。
测试方法:3种数据库SQLSERVER、ACCESS、SQLITE,分别都有一个CUSTOMERS的数据表,里面各自都有同样数量的数据(1.8W)
连接方式:
1、SQLSERVER:adoconnection+adoquery+datasetprovider+clientdataset
2、SQLITE:ASQLite3DB+ASQLite3Query+datasetprovider+clientdataset
3、ACCESS:adoconnection+adoquery+datasetprovider+clientdataset
打开方式:clientdataset.open
测试结果:
SQLSERVER:9.9秒
SQLITE:10秒
ACCESS:9.9秒对ADO的连接方式进行优化:将ADOQUERY的属性设置一下:CursorLocation->clUseServer,CursorType->ctOpenForwardOnly,LockType->ltReadOnly
再次测试的结果如下:
测试结果:
SQLSERVER:3.8秒
SQLITE:10秒
ACCESS:3.6秒第一次测试结果,SQLITE没有占到上风,第二次测试结果,SQLITE则完全处于下风同样的数据量,在.net平台下对SQLSERVER、SQLITE、Access进行测试
三种连接方式:oledb连SQLSERVER,sqlclient连SQLSERVER,SQLiteConnection连SQLITE,oledb连access
测试结果按速度快慢分别是:sqlclient>SQLiteConnection>oledb(SQLSERVER)>OLEDB(access)
速度分别是:0.65秒,1秒,1.18秒,1.8秒在.net平台下,SQLITE可以做到比OLEDB的连接方式的速度要快,所以我觉得在delphi下SQLITE也应该比ADO连SQL的速度要快才对的。
但是所有属性都试过,并没有改善性能的方法。不知道各位有没有好的优化方案?

解决方案 »

  1.   

    select * from customers
      

  2.   

    不好意思,看到了,"clientdataset.open "
    你只是看开打的速度,其它操作是不是也一样呢?
    还是你只是用作数据显示.
      

  3.   

    是不是通过ado的sqlite并不占优势,或者你的表建立的索引有关系?
    仅供参考,另外:觉得用accese和sql server来作对比不太合适
      

  4.   

    關注,還沒有太了解sqlite 
      

  5.   

    找到一个比较合适的控件了,DISQLite3
    只是这个控件所支持的数据类型不是太完善,需要自己动手完善一下它的字段类型的判断。
    还有就是实际使用中发现SQLITE对SQL语法支持不是太完善,一些基本的SQL语言的特性都不支持。不过也可以将就着用了。
    在Delphi用这个控件做一个基本的和较复杂的查询,速度都比SQLSERVER的速度要快。只是该控件不支持使用参数来更新数据库,没有EXECSQL的函数,需要自己动手增加。改造后的控件还算比较好用!