Performance Sqlite子查询:在一个大查询中还是在for循环中?

Performance Sqlite子查询:在一个大查询中还是在for循环中?,performance,sqlite,subquery,Performance,Sqlite,Subquery,我本打算对其进行基准测试,但由于这需要大量的工作,我想检查一下,以前是否遗漏了任何明显的答案 我有一个巨大的查询,它通过一个子查询获取每一行的更多细节 然后,每一行都会在插入ListView的ListAdapter中使用,因此另一个循环会逐个获取每一行,使其成为ListItem 你认为什么更有效: 将子查询保持在SQL混乱中,依靠SQL引擎进行优化 去掉ListAdapter循环中的子查询,这样我们就可以懒洋洋地加载显示的细节:可读性要高得多,但我担心太多的点击会减慢过程 两件重要的事情:

我本打算对其进行基准测试,但由于这需要大量的工作,我想检查一下,以前是否遗漏了任何明显的答案

我有一个巨大的查询,它通过一个子查询获取每一行的更多细节

然后,每一行都会在插入ListView的ListAdapter中使用,因此另一个循环会逐个获取每一行,使其成为ListItem

你认为什么更有效:

  • 将子查询保持在SQL混乱中,依靠SQL引擎进行优化
  • 去掉ListAdapter循环中的子查询,这样我们就可以懒洋洋地加载显示的细节:可读性要高得多,但我担心太多的点击会减慢过程
两件重要的事情:

  • 我无法重写大的SQL块来删除子查询。我知道这样会更好,但我没能做到
  • 据我所知,一个列表包含的项目不会超过1000个,而且它是一个桌面应用程序,因此没有并发性。在这种情况下,这是否与关注性能相关?如果不是的话,我仍然对高流量网站的answser感兴趣。很高兴知道

使用游标怎么样

我更喜欢使用大查询,让我的SQL引擎优化我的查询。 另外,我想不出一个例子,在SQL之外执行循环比使用“大”查询或游标更好

但知道什么更好的最好方法是对其进行基准测试


祝你好运

< P> SQLite是一个出奇好的小引擎,但它不是真正的额外聪明的优化,我不会真的认为它是一个“高流量网站”。一大优点(在其限制范围内使用)是它可以在进程中运行,因此与一个大查询相比,多个查询的开销确实很小;如果这是最简单的代码,对于你的特定用例,我真的会考虑它(并且用一种“懒散的加载”方式来做,正如你所暗示的那样,可能会使数据的第一个屏幕看起来更快!)正如您所怀疑的,在您的用例中,这不太可能成为性能瓶颈,因此采用更简单、更可靠的编码是一个重要的优点


如果我在做一个高流量的站点,并且使用一个更丰富、“更重”的引擎,比如PosgtreSQL、Oracle、sqlserver或DB2,我会更信任优化器。然而,我注意到的一件事是,我经常(唉,不总是)将子查询更改为联接,这通常会提高性能(我认为,联接使优化器更容易使用好的索引——我自己从来没有编写过SQL优化器,但这是我的印象,因为我从许多引擎开始为其他形式的查询编写查询执行计划……当然,这确实假设您有好的索引!)--当然,这必须通过所讨论的具体案例的基准来确认,但这将是我最初的工作假设。

我已经在使用游标,但我没有意识到它可以解决部分问题。:-)