我有一个简单的数据库/表,大约有1M条记录。没有索引,全部干净。 sqlite3 shell在4.4秒内执行以下查询:
通过排放asc限制30从表顺序中选择*;
windows10 / VS2017 / sqlite 3.20.0中完全相同的语句需要14秒:
rc = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
sqlite3_step(stmt);
我经历了所有的pragma。没运气。知道性能差异可能来自何处?
找到了一些东西:
像往常一样,问题不在我们看来的地方。对于给定的查询,通过编译指示进行的优化是微不足道的。但是,我在调试和发布模式下测试了代码,差别很大:
无优化,调试:13.7秒
整体优化/尺寸,释放:2.5秒!
某处有一个对速度有重大影响的选项。知道哪一个并在调试模式下应用它会很好。
找到它:
我使用合并。应用适当的编译/链接选项是关键。
默认/当前选项:14.4秒
将调试信息格式从/ ZI更改为Zi:9.7秒
将基本运行时检查从/ RTC1更改为默认值:5.4秒
将优化/ Od(禁用)更改为/ O1(大小):3.0秒
这是很多试验,错误和发现。我希望它可以帮助别人!