同じ構造のログ テーブルがいくつかあります。各テーブルはサイトに関連付けられており、数十億のエントリを数えます。この分割の理由は、クエリの 99.99% がサイトに関連しているため、クエリを迅速かつ効率的に実行するためです。
しかし、現時点では、これらのテーブルの列の最小値と最大値を取得したいと思いますか?
SQL リクエストを書き込めません。使用する必要がありますUNION
か?
最終的な SQL リクエストではなく、リクエストの概念を探しているだけです。
同じ構造のログ テーブルがいくつかあります。各テーブルはサイトに関連付けられており、数十億のエントリを数えます。この分割の理由は、クエリの 99.99% がサイトに関連しているため、クエリを迅速かつ効率的に実行するためです。
しかし、現時点では、これらのテーブルの列の最小値と最大値を取得したいと思いますか?
SQL リクエストを書き込めません。使用する必要がありますUNION
か?
最終的な SQL リクエストではなく、リクエストの概念を探しているだけです。
はい、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
各パーティションの最大値を非常に迅速に見つけることができるように、各テーブルにインデックスがあることを確認する以外に、それほど役立つものはありません。