如何有效地刷新昂贵查询的结果?

时间:2010-12-23 16:28:52

标签: sql database performance

3 个答案:

答案 0 :(得分:0)

想知道为什么no1已回复到目前为止,但无论如何,也许这是一个选项: 创建一个名为“update_groups”的辅助表,而不是更新所有记录,然后将记录链接到该组,并在组上设置时间戳而不是单独的记录。 U也可以使用布尔值而不是时间戳“IsUpdated”..或者其他东西。 但这只有在记录可以放入组的情况下才有效,如果您拥有的只是一个很大的记录列表,那么您可以创建一个包含1个或多个名为“UpdateList”的记录的表,并且只需使用其中的ID更新该表。改变记录。你可以用逗号分隔它们,你就会知道接下来要查询什么。它非常轻巧。您唯一应该注意的是如何更新此记录。我认为每当记录更新时,您只需将id附加到当前记录,然后当您更新UI时,您可以清除所有值并再次开始填充它们。那;基本上它是如何工作的。 祝你好运!

答案 1 :(得分:0)

在数据库中使用全局修订号读取已提交隔离级别(其他客户端只能在提交事务后读取数据,几乎是标准) 。诀窍是不要让读者知道最新版本,直到所有新行都更新到它。当然,交易也可以只包含一个更新的行。

可以使用单独的轻量级表来跟踪修订号并在阅读时加入该表。这允许您通过将N表中的N与1连接到修订表来管理每组行的修订号(如果您需要)。

写作过程:

初始化全局修订号X = 1.

每次更新:

  1. 增量X。
  2. 开始一项交易(可能是隐含的)。
  3. 更新要更新的所有行,并将其修订号更新为X。
  4. 提交。
  5. 阅读过程:

    初始化最后一个已知的修订号Y = 0.选择新数据如下:

    每次刷新:

    1. SELECT * FROM some_really_big_table WHERE revision> ÿ
    2. 使用新设置中已知最高版本号更新Y.

答案 2 :(得分:0)

您可以使用伪列ora_rowscn来跟踪更改