次の問題に取り組むための2つの潜在的な道があります。サーバーの負荷は常に流動的であるため、試してみて、方法論がこのソリューションに報われないことを確認してください。私が持っている2つのアプローチは次のとおりです。
select *
from
(
select foo.a,bar.b,baz.c
from foo,bar,baz
-- updated for clarity sake
where foo.a=b.bar
and b.bar=baz.c
)
group by a,b,c
副
create table results as
select foo.a,bar.b,baz.c
from foo,bar,baz
where foo.a=b.bar
and b.bar=baz.c ;
create index results_spanning on results(a,b,c);
select * from results group by a,b,c;
したがって、明確でない場合に備えて。一番上のクエリは、複数テーブルの選択に対して完全にgroup byを実行するため、インデックスを使用できません。2番目のクエリを使用すると、クエリの結果を格納する新しいテーブルを作成し、スパニングインデックスの作成に進み、クエリごとにグループ化してインデックスを利用できます。
これら2つのアプローチの複雑さの違いは何ですか。つまり、どのようにスケーリングするか、そして大量のデータの場合にどちらが望ましいかです。また、主な問題は全体的な選択のパフォーマンスであるため、ここで修正しようとしています。
コメントコメント
本当に3つのテーブルでCROSSJOINを実行していますか?これらの3つの列は、それ自体でインデックスが付けられていますか?最終結果を提供するクエリをどのくらいの頻度で実行しますか?
1)いいえ
。2)はい。これは明らかに非常に些細な例であるため、説明のために句を省略しました
。3)関係ありません。
2回目の更新
これは一時的なテーブルであり、一時的にのみ有効であるため、はい、このテーブルは1回だけ照会されます。