视图与具有大型数据集的索引表的性能

时间:2012-10-11 21:24:14

标签: mysql sql optimization

我有一张包含15,000,000条记录的表格。这些记录可以基于某些匹配字段彼此相关(在单个组中通常最多为3或4)。每条记录也都有一个与之关联的日期,但是这个日期并不一定与它加载到表格中的日期/顺序相关。

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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