有一个项目,服务端用java+oracle,客户端用C#做的winform程序,sqlite作为本地数据库(将需要的数据从服务器数据库同步下载到本地数据库,供程序查询使用)。
随着业务查询的需求复杂度增加,发现sqlite的查询效率变低!
听说sqlite支持将本地数据库文件 读取为内存数据库,查询效率会提升数倍,可是真的不知道从哪里下手,希望有高手给个思路:
C#怎么读取本地sqlite数据库文件为内存数据库,怎么查询?感谢!
用特定的连接字符串就行了。
Data Source=:memory:;Version=3;
然后不关闭连接,就可以使用该内存数据库了。关闭后,内存数据库就没了。只能重新开连接。
为了保持连接,可以使用static SqliteConnection
谢谢,可是我需要把本地数据库读取为内存数据库,怎么弄呢?我的数据都在数据库文件里
@飞扬Design: 建表语句,开一个本地文件的连接,然后写入到内存。
@幻天芒: 建两个数据库连接?能贴点代码么?万分感谢!!!!
@飞扬Design:
var conMemory=new SqliteConnection("");//内存数据库连接 var conFile=new SqliteConnection("");//文件数据库连接 //然后读取conFile下的每个表的数据,批量写入到conMemory中 var tableNames=new[]{"table1,"table2"}; foreach(var tableName in tableNames) { //开启事务 this.InsertData(conMemory,conFile,tableName);//读取conFile下的tablaName表的数据,写入到conMemory中,大概思路就是这样。我暂时没找到更快速的直接附加方式,呵呵。 }
查询效率,好几个方面影响。不单单是文件、或者内存存储影响。而且我认为.sqlite.只要不是单表几十万的数据量,影响不会太大。
首先从应用和设计上去优化一下,应用索引、关联、试图、数据建模要关注单标数据量的分切。
其次、编码层面的优化,注意编码中性能的损耗。比如.避免全表扫描、查询最好应用索引字段等.
最后,在使用sqlite、和代码编写层次没有太大的改观的情况下,尝试内存存储。
谢谢你的建议,现在的问题是 单表数据量也不小了,主要想尝试一下 看看内存数据库读取效率能否提高得比较明显,如果有这方面的代码,烦请贴一点给我,谢谢了
@飞扬Design: 我也只是知道可以这么做,同时有c++之前使用内存存储的,c#的没有用过,持续关注答案。google一下吧.应该不少