在多个相同的表上执行查询和计数行

时间:2014-09-01 14:03:53

标签: sql-server oracle

我为每个日期创建了多个表,以存储每个日期的一些信息。 例如History3108,History0109..etc所有这些表共享相同的模式。有时我需要查询多个表并获取记录的行数和计数。在Oracle和SQL Server中执行此操作的更快方法是什么?

目前我这样做......

  1. 当我需要多个表的计数时:为每个表选择count(*)并添加
  2. 当我需要多个表的记录时:从table1中选择*,从table2中选择*(基本上为每个表选择*。)
  3. 如果我们在一个事务中包含所有查询,这会提供更好的性能吗?

1 个答案:

答案 0 :(得分:1)

使用UNION,您可以从多个表中获取共享相同数据类型组和列名称的记录。例如,如果要查看多个表中的所有记录:

(select * from history3108)
union all
(select * from history0109)
union all
(select * from history0209)
/* [...] and so on */

如果你想计算这些表中的所有记录:

select count(*) from (
  (select * from history3108)
  union all
  (select * from history0109)
  union all
  (select * from history0209)
  /* [...] and so on */
);
  1. Oracle Docs - UNION [ALL],INTERSECT,MINUS Operators