1

我打算对此进行基准测试,但由于工作量很大,我想检查一下我之前是否没有错过任何明显的答案。

我有一个巨大的查询,它通过子查询为每一行获取更多详细信息。

然后将每一行用于插入到 ListView 中的 ListAdapter 中,因此另一个循环将每一行逐一处理以使其成为 ListItem。

你认为什么更有效:

  • 将子查询保留在 SQL 混乱中,依靠 SQL 引擎进行优化。
  • 取出 ListAdapter 循环中的子查询,因此我们延迟加载显示的详细信息:更具可读性,但我担心太多的命中会减慢进程。

两件重要的事情:

  • 我无法重写大 SQL 块来摆脱子查询。我知道这会更好,但我没有这样做。
  • 据我所知,一个列表不会包含超过 1000 个项目,而且它是一个桌面应用程序,因此没有并发性。在这种情况下,这甚至与关心性能有关吗?如果没有,无论如何,我仍然会对高流量网站的答案感兴趣。很高兴知道...
4

2 回答 2

2

SQlite 是一个出人意料的好小引擎,但它并不是特别聪明的优化,我不会真正将其视为“高流量网站”。一大优点(在其限制范围内使用)是它可以在进程内运行,因此与一个大查询相比,多个查询的开销非常小;如果这是最容易编码的,对于您的特定用例,我真的会考虑它(正如您所暗示的那样,以“延迟加载”的方式进行操作,实际上可能会使第一个数据屏幕看起来更快!)。正如您所怀疑的那样,在您的用例中,这不太可能成为性能瓶颈,因此采用更简单且因此更可靠的编码是一个重要的优势。

如果我正在做一个高流量的站点,并使用更丰富、“更重”的引擎,例如 PosgtreSQL、Oracle、SQL Server 或 DB2,我会更加信任优化器。然而,我注意到的一件事是,我经常(唉,并非总是)将子查询更改为连接,这往往会提高性能(连接使优化器更容易使用良好的索引,我认为 - - 我自己从未编写过 SQL 优化器,但这是我盯着来自许多引擎的查询执行计划以寻找替代形式的查询时的印象......当然,假设你有很好的索引!-) -这会有当然,要通过特定案例的基准来确认,但这将是我最初的工作假设。

于 2009-06-18T04:54:23.580 回答
1

那么使用游标呢?

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

但了解什么更好的最好方法是对其进行基准测试。

祝你好运!

于 2009-06-16T07:28:14.033 回答