我正在使用c ++中的sqlite
,我希望实现一个进度条,告知用户搜索的进度。
使用sqlite3_progress_handler我可以设置每个N个虚拟机指令调用ca回调。这对于通知用户应用程序仍在工作的无限进度条是可以的。
我需要的是从0开始的进展 - > 100%。可以这样做吗?
答案 0 :(得分:2)
数据库无法预测查询需要多长时间(或多少VM指令)。
答案 1 :(得分:2)
我意识到这有点晚了,这个问题已经有了一个公认的答案,但我认为更多的信息会有用。
正如OP在问题中指出的那样, sqlite3_progress_handler 可以配置为每N个VM指令调用回调函数。这不是时间进度监视器或查询语句进度监视器,而是查询计划程序为查询计算的VM指令的监视器(将在紧急情况下执行)。
通过使用'EXPLAIN QUERY PLAN'(或简称'EXPLAIN')来查询查询并逐步调整结果以获得计数,您将知道查询计划中有多少VM指令。这是你100%的数字。
请务必阅读SQLite.org网站上关于EXPLAIN QUERY PLAN命令的注意事项,特别是关于不依赖于输出格式的部分。但是对于这种情况,我们并不关心结果中的信息,而只关注指令的数量。