从具有相同结构的不同表中检索最小值和最大值

时间:2012-12-18 15:31:13

标签: mysql

我有一些具有相同结构的日志表。每个表都与一个站点相关,并且数十亿条目。这种拆分的原因是执行快速有效的查询,因为99.99%的查询与网站相关。

但此时,我想检索这些表的一列的最小值和最大值?

我无法编写SQL请求。我应该使用UNION吗?

我只是在寻找请求概念,而不是最终的SQL请求。

1 个答案:

答案 0 :(得分:2)

你可以使用UNION,是的。这样的事情应该做:

SELECT MAX(PartialMax) AS TotalMax
  FROM 
  ( SELECT MAX(YourColumn) AS PartialMax FROM FirstTable UNION ALL SELECT MAX(YourColumn) AS PartialMax FROM SecondTable ) AS X;

如果你想在列中找到一个MAX索引,你应该有非常好的性能,因为查询应该寻找该列索引的末尾以非常快速地找到最大值。如果该列没有索引,则查询必须扫描整个表以查找最大值,因为没有任何内容可以对其进行排序。

添加了一些细节,以解决对“大量查询”的疑虑。

我不确定你的意思是“巨大的”。你可以创建一个为你做UNION的VIEW;然后,您使用视图,它将使查询非常小:

SELECT MAX(YourColumn) FROM YourView;

但这只会优化查询文本的大小。为什么你认为优化它很重要? VIEW对维护很有帮助 - 如果添加或删除分区,只需适当修复视图即可。但是长篇查询文本应该不是问题。

或者通过“巨大”,您是否担心查询将执行的I / O量?除了确保每个表都在YourColumn上有索引以便可以非常快速地找到每个分区的最大值之外,没有什么可以帮助那么多。