sqlite性能提升
常规操作
常规连接sqlite字符串为 data source=db.db;version=3;
用上述字符串连接sqlite,然后用 System.Data.SQLite 访问数据库时发现有下述几个问题:
- 往表中插入一条数据时大约耗时100ms(无论表中数据是否很多),这在插入大量数据时会等待很长时间
- 多线程访问数据库时,会有占用锁的报错
sqlite是已文件的形式存在磁盘中,每次访问时都要打开一次文件,如果对数据进行大量的操作,那会很慢。建议以事务的形式执行同时的多个操作,尽量减少执行的次数。
性能提升
可以修改连接字符串:data source=db.db;version=3;Synchronous=Off;Journal Mode=WAL;
Synchronous=Off | 关闭同步 | 添删改操作时不必同步等待写入磁盘,操作系统会延迟若干毫秒批量写入 |
Journal Mode=WAL | 减少锁定 | 入向前日志模式,避免多线程访问时锁定数据库,写入时不必使用排它锁影响其它线程读取,而是把事务操作写入到WAL文件中,延迟合并 |
Cache Size=5000 | 加大缓存 | 操作系统通过文件映射MapFile把整个数据库文件映射进入内存,实际查询时会把用到数据所在附近页预先加载进入缓存,极大提升查询性能 |