添付されているのは、前述の各テーブルの行数を示すために、各テーブルの横にコメントを付けてスキーマをレイアウトするフィドルです。フィドルがブロックされている場合、クエリは次のようになります。
select distinct cat_name,cat_age, co_cat_owners_id,cat_weight,cs_is_alive,os_is_current, cos_is_current,
sum(cat_age) over(partition by co_cat_owners_id) running_total
from
(
select co.cat_owners_id co_cat_owners_id,
co.cat_id co_cat_id,
co.owner_id co_owner_id,
co.vet_id co_vet_id,
cos.is_current cos_is_current,
os.is_current os_is_current,
cs.is_alive cs_is_alive,
cat.name cat_name,
cat.age cat_age,
cat.weight cat_weight
from cat_owners co,
cat_owner_statuses cos,
cat_statuses cs,
cats cat,
owners o,
owner_statuses os
where o.owner_id = co.owner_id
and cat.cat_id = co.cat_id
and cos.last_visit >= sysdate - 4/24
)
where cs_is_alive = '1'
and (cos_is_current = '1' OR os_is_current='1')
group by cat_name,cat_age,cat_weight,cs_is_alive,os_is_current,co_cat_owners_id,cos_is_current;
私の開発環境では、Explainプランは、ステップの観点から、フィドルの内部に非常に近いレイアウトになっていますが、メモリサイズが15E(exabytes)、行数が4000P(petabytes)のいくつかのステップがあります。私の質問は、インデックスの作成/ SQLの不良に沿って、はるかに少ないスペースと時間で解決できるはずの問題に対して、15エクサバイトのソリューションをどこで生成できたかということです。複合インデックスの作成手順の一部を微調整すると、わずかに異なる結果が得られることに気付きましたが、それでもエクサバイトのスペース要件によってブロックされています。
ノート
将来誰かがすべてのコメントを読まない場合は、次の関数を正しい結合と組み合わせて実行すると役立ちます。
analyze table table_name_here compute statistics;