0

同じ構造のログ テーブルがいくつかあります。各テーブルはサイトに関連付けられており、数十億のエントリを数えます。この分割の理由は、クエリの 99.99% がサイトに関連しているため、クエリを迅速かつ効率的に実行するためです。

しかし、現時点では、これらのテーブルの列の最小値と最大値を取得したいと思いますか?

SQL リクエストを書き込めません。使用する必要がありますUNIONか?

最終的な SQL リクエストではなく、リクエストの概念を探しているだけです。

4

1 に答える 1

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各パーティションの最大値を非常に迅速に見つけることができるように、各テーブルにインデックスがあることを確認する以外に、それほど役立つものはありません。

于 2012-12-18T15:36:09.890 に答える