0

我有一张包含 15,000,000 条记录的表。这些记录可以根据某些匹配字段相互关联(通常单个组中最多 3 或 4 个)。每条记录还有一个与之关联的日期,但是该日期不一定与它被加载到表中的日期/顺序相关。

这些记录定期用于更新数据库中的其他记录。不过,我只关心单个组中的 LATEST 记录,并且有 1500 万条记录(正在更新另外 1000 万条记录),我想确保忽略其他所有内容。如果最新记录已经有“更新”标志,我也想跳过更新。

我一直在使用这样的视图来收集每个组中的最新记录:

SELECT a, b, c, max(scan.timestamp) AS latest_scan
FROM scan
GROUP BY a, b, c;

然后我在 my 中使用一个WHERE子句UPDATE来忽略任何带有更新标志的记录。

有这么多记录,我可以使用视图吗?我已经看到人们开始动态创建真正的可索引表以提高性能,但我仍然觉得这需要很长时间。这是我可以从中受益的东西吗?

4

1 回答 1

0

大多数情况下,您需要尝试一下,看看性能如何。

关键是视图最终将成为子查询的快速表示法,它将为优化器提供信息。因此,它仍然主要取决于优化器是否可以找到用于调用数据库的 SQL 语句的索引。

请注意,您的视图中可能不需要 ORDER BY,因为您将在其他一些 SQL 语句中使用它,然后可以对记录进行排序。如果优化器没有发现它可以跳过 order by,那么你只会在不需要的时候花时间排序。

我希望您可以使用 GROUP BY a, b, c 来获取组的最大时间戳。

于 2012-10-11T21:56:30.097 回答