我正在使用 Java 开发 SQLite 数据库分析工具。我当前的目标是检查数据库中哪些表和视图不包含记录。我的问题是速度问题。当试图确定一个视图是否为空时,我最大的减速发生了。我已经针对 SQLiteSpy 中的单个视图测试了单个查询,但我无法将返回时间降低到 1-2 秒以下。放大到数百个视图,这种性能是不可接受的,甚至不关心该功能。使用我自己的代码,我可以检查大约 120 个表,最大的在 100,000 行左右,平均速度为 3.74 毫秒。
我目前的查询:
SELECT exists(SELECT 1 FROM table LIMIT 1);
正如我所说,这对我的表来说很好,但是对于视图来说,它太慢了。
我还尝试了以下方法:
SELECT count(*) FROM table;
SELECT count(1) FROM table;
SELECT 1 FROM table LIMIT 1;
我还尝试选择一个限制为一的已知列,这需要几秒钟。
我最后的手段是先查询表,然后查询视图,并在整个过程中设置一次超时。我的测试数据库有大约 250 个表和视图,每个都不是很大。我的目标是能够在最多 1.5 秒内报告哪些是空的。我希望能够提供像 SQLiteSpy 这样的功能,其中树视图中的表和视图用绿色加号或红色减号标记。我只是想不通他们怎么能这么快地标记它们。