0

所以我有一个表,将来将包含数千行。

这些行包含我需要返回的日期和其他数据。

我将有一个 Dates 数组,我需要用它来查询原始表以返回适当的数据。

目前我有一个设置,以便将整个原始表复制到一个数组中,然后对于每个日期,我使用 for 循环复制所有数据。

for un in range(0,listc)
    for i in range(0,bigtablec)
        if list[un] == bigtable[i][1]
            a[un] = bigtable[i][2]

所以上面是它当前如何工作的一个例子。

我的问题是在 bigtable 上使用多个 SELECT 查询是否会比上述方法更快。

因此,对于每个“for un in range(0,listc)”,它将在列表数组中查询具有相应日期的表。然后从返回的单个行中获取数据。

如果这是一个明显的问题,请道歉。

4

2 回答 2

0

假设您在表上有适当的索引,使用查询检索所需数据会更快。当前的实现是一个O(n^2)操作。在服务器上有适当的索引,它将是O(log n)O(n log n)(我不完全确定我理解 OP 循环中显示的逻辑)。除了使用索引的效率之外,这还意味着从服务器传输到客户端应用程序的数据更少。

于 2013-08-12T21:08:45.353 回答
0

这不是一个好的解决方案。

您应该尝试在一次网络往返中将所有数据带回,而不是在列表中每个日期都有一个。

您没有说这在内存中代表了多少数据。您需要小心“将整个表复制到数组中”。

查询的效率取决于 EXPLAIN PLAN、表上的索引以及需要多少次网络往返才能将其带回来的组合。

于 2013-08-12T21:09:17.847 回答