次のような oracle データベース スキーマがあるとし
ます
。
gameinfo テーブルは、特定のプレイヤーが特定の日にトーナメントで特定のゲームをプレイしたことを意味します。Tournaments には約 20 のレコード、約 160,000 人のプレイヤー、約 200 万のゲーム情報があります。トーナメント (tid は 1 ~ 4 の範囲) と、そのトーナメントで初めてゲームをプレイしたプレイヤーの数をリストするクエリを作成する必要があります。
次のクエリを思いつきました。
select tid, count(pid)
from gameinfo g
where g.date = (select min(date) from gameinfo g1 where g1.player = g.player)
and g.tid in (1,2,3,4)
group by tid;
これは明らかに最適ではありません (約 58 分間実行されました)。私は別の考えを持っていました。
select pid, tid, min(date)
from gameinfo
where tid in(1,2,3,4)
group by pid, tid;
約 600,000 レコードしかないので、このビューでクエリを実行しますが、これはまだ最適とは言えません。
これを最適化する方法について何かアドバイスをいただけますか?