2017-12-05 4 views
0

私は6つのテーブルを持っています。それらのすべては、何百万と何百万ものデータ行を持つことができます。すべてのテーブルにobject_id、changer_id、date_createdカラムがあります。1つのクエリに同じ列を持つ複数のテーブルへのクエリの結合

私はテーブルのすべての

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つのテーブルで1つのクエリに結合する方法や、別の6つのクエリより高速にする方法はありますか?

+0

ユニオンのクエリでは、これを行うことができます。https://www.postgresql.org/docs/current/static /queries-union.html - 最終的には、いつでもDataSourceを使用して自分で行うことができます。 – cfrick

+0

@cfrick私は「いつもデータソースができますか?私はいくつかの言葉がないと思う。そして、組合では、それはまだ6つの異なる質問をします。最後に6つの質問を組み合わせます.6つの質問を別々に行い、それらを組み合わせるのではないですか? –

+0

"いつでもDSを注入できます"; DBはすべての作業を行い、最小限のデータ量しか返さないため、処理速度が向上します。もちろん、パフォーマンスは測定されなければならず、貨物が栽培されていなければなりません。 – cfrick

答えて

0

SQLの継承:一度これを行う:

と仮定し、あなたのテーブルには、

セットアップは、などtable1table2、必要とされているよう

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 ...を使用する必要はありません。より一般的なリストの列の構文を使用できます)

関連する問題