我有6张桌子。所有这些都可以拥有数百万行数据。所有表都有object_id,changer_id,date_created列。
我需要对所有表格进行查询
SELECT object_id
FROM table#
WHERE changer_id=someId
AND date_created > dateA
AND dateCreated < dateB
或其等值的grails
table#.createQuery().list{
projections{property('object_id')}
eq('changer_id', someId)
ge('dateCreated' dateA)
le('dateCreated', dateB)
}
将对所有6个表进行相同的查询,然后合并结果并删除所有重复项。
我之间没有使用,因为dateB可能并不总是存在,所以它会被忽略。
有没有办法将这个查询组合成6个表或任何其他方式的单个查询,使其比6个单独的查询更快?
答案 0 :(得分:0)
SQL继承:
假设您的表格为table1
,table2
等,
设置:执行一次:
create table combined ( like table1 );
alter table table1 inherits combined;
alter table table2 inherits combined;
alter table table3 inherits combined;
alter table table4 inherits combined;
alter table table5 inherits combined;
alter table table6 inherits combined;
查询,根据需要多次执行此操作:
SELECT object_id
FROM combined
WHERE changer_id=someId
AND date_created > dateA
AND dateCreated < dateB
postgresql将在内部生成所需的联合。
我假设所有表都具有相同的列,如果不排除在创建组合表时某些表中缺少的任何列。 (您不必使用like
...,您可以使用更常见的列表列表语法)