非常に遅いです:呼ばテーブルは約300万行が含まれている場合のOracle副問合せのSELECT MAX()は、次のSQL
SELECT *
FROM Transaction_Auth_Series t
WHERE t.Auth_ID =
(
SELECT MAX(p.Session_ID)
FROM Clone_Db_Derective p
WHERE p.Date = trunc(sysdate)
AND p.Regularity = 'THEME'
);
は非常に遅いです。しかし、それはSQLは、2つのカーソルに書き込まれている場合、数秒の問題だすなわち
CURSOR GetMaxValue IS
SELECT MAX(p.Session_ID)
FROM Clone_Db_Derective p
WHERE p.Date = trunc(sysdate)
AND p.Regularity = 'THEME'
CURSOR GetAllItems(temp VARCHAR2) IS
SELECT *
FROM Transaction_Auth_Series t
WHERE t.Auth_ID = temp;
と
........
FOR item in GETMAX LOOP
FOR itemx in GETITEMS(item.aaa) LOOP.......
テーブルが関連していないと機能しません参加します。上記のメインSQLをどうやって最適化できますか?このクエリの
実行計画が最適ではない可能性があります。たとえば、オプティマイザは、おそらくテーブル統計に基づいて結合を最初に実行するように内部的に変換しました。そうであれば、統計を修正したり、クエリを並べ替えたりヒントしたりすることができます。 –
あなたは@WilliamRobertsonの提案を詳しく教えてもらえますか? – MaDi
このような単純なクエリに対して実行計画が悪い場合は、通常は統計が間違っていることを意味します。したがって、SQLチューニングの練習には、プランをチェックし、統計を確認する必要があります。彼らはどのように見えるのですか? –