私は2つのテーブルを結合しました。それは本当に本当に遅く、私はなぜ見つけることができません。 非常に大きなクライアントのPRODUCTION環境では、クエリに何時間もかかります。 なぜそれがうまくいかないのか理解する必要があるのですか? インデックスを追加したり、テーブルを分割したりできます。これはOracle 10gです。 私は数千のレコードを期待しています。 !次の条件のため: f.eif_campo1 = c.fornitura ANDとf.field29 =「新規」 Infactは、次のレコードの全18万レコードOracle:表領域の断片化を検出するにはどうすればよいですか?
SELECT c.id_messaggio
,f.campo1
,c.f
FROM
flows c,
tab f
WHERE
f.field198 = c.id_messaggio
AND f.extra_id = c.extra_id
and f.field1 != c.ExampleF
and f.field29 = 'New'
and c.processtype in ('Example1')
and c.flag_ann = 'N';
選択性は、のように表現するためには、常に確認する必要があります個別値の数:!
COUNT (DISTINCT extra_id) =>17*10^6,
COUNT (DISTINCT (extra_id || field20)) =>17*10^6,
COUNT (DISTINCT field198) =>36*10^6,
COUNT (DISTINCT (field19 || field20)) =>45*10^6,
COUNT (DISTINCT (field1)) =>18*10^6,
COUNT (DISTINCT (field20)) =>47
これは、実行計画である[大きな画像を参照してください] [1] [ここに画像の説明を入力します] [2]
を
詳細: 私はいくつのレコードが取られているかを見るために1つのcontitionをリラックスしています。 30万。
[ここで、画像の説明を入力] [7]
--03:!(24 F)、並列実行/ * +パラレル(C 8)平行と57分*/
--395.358行
SELECT count(1)
FROM
flows c,
flet f
WHERE
f.field19 = c.id_messaggio
AND f.extra_id = c.extra_id
and f.field20 = 'ExampleF'
and c.process_type in ('ExampleP')
and c.flag_ann = 'N';
クエリによって返される行の数はいくつですか? – Ben
私は数千の記録を期待しています。この条件のため:f.eif_campo1!= c.flh_fornitura。事実、それは1800万レコードすべてについて常に検証されるべきです。 – Revious
@ Gik25:この条件がなければ、何行目を期待しますか? –