私はこのクエリを最適化しなければならないと言ってSQLクエリを与えられました。Oracleクエリーを最適化するにはどうすればよいですか?
私はaccross explain plan
になりました。だから、SQL開発者では、
のクエリを分割し、それぞれのコストを表示しました。
クエリを最適化するにはどうすればよいですか?私は何を探しますか?コストの高い要素ですか?
私は少しDBに新しいので、より多くの情報が必要な場合は、私に尋ねてください、私はそれを取得しようとします。
私は、クエリ自体を投稿して答えを得るのではなく、プロセスを理解しようとしています。
問題のクエリ:計画を説明し実行するには
SELECT cr.client_app_id,
cr.personal_flg,
r.requestor_type_id
FROM credit_request cr,
requestor r,
evaluator e
WHERE cr.evaluator_id = 96 AND
cr.request_id = r.request_id AND
cr.evaluator_id = e.evaluator_id AND
cr.request_id != 143462 AND
((r.soc_sec_num_txt = 'xxxxxxxxx' AND
r.soc_sec_num_txt IS NOT NULL) OR
(lower(r.first_name_txt) = 'test' AND
lower(r.last_name_txt) = 'newprogram' AND
to_char(r.birth_dt, 'MM/DD/YYYY') = '01/02/1960' AND
r.last_name_txt IS NOT NULL AND
r.first_name_txt IS NOT NULL AND
r.birth_dt IS NOT NULL))
、私はスクリーンショットをアップロードしようとしています。クエリへの迅速な更新として
OPERATION OBJECT_NAME OPTIONS COST
SELECT STATEMENT 15
NESTED LOOPS
NESTED LOOPS 15
HASH JOIN 12
Access Predicates
CR.EVALUATOR_ID=E.EVALUATOR_ID
INDEX EVALUATOR_PK UNIQUE SCAN 0
Access Predicates
E.EVALUATOR_ID=96
TABLE ACCESS CREDIT_REQUEST BY INDEX ROWID 11
INDEX CRDRQ_DONE_EVAL_TASK_REQ_NDX SKIP SCAN 10
Access Predicates
CR.EVALUATOR_ID=96
Filter Predicates
AND
CR.EVALUATOR_ID=96
CR.REQUEST_ID<>143462
INDEX REQUESTOR_PK RANGE SCAN 1
Access Predicates
CR.REQUEST_ID=R.REQUEST_ID
Filter Predicates
R.REQUEST_ID<>143462
TABLE ACCESS REQUESTOR BY INDEX ROWID 3
Filter Predicates
OR
R.SOC_SEC_NUM_TXT='XXXXXXXX'
AND
R.BIRTH_DT IS NOT NULL
R.LAST_NAME_TXT IS NOT NULL
R.FIRST_NAME_TXT IS NOT NULL
LOWER(R.FIRST_NAME_TXT)='test'
LOWER(R.LAST_NAME_TXT)='newprogram'
TO_CHAR(INTERNAL_FUNCTION(R.BIRTH_DT),'MM/DD/YYYY')='01/02/1960'
このプロセスを順を追って説明しますが、クエリを確認する必要があります。各問合せはそれぞれ異なりますが、一般に、表/クラスター索引スキャンはできるだけ避けたいとします。クエリプランを読むことは、科学よりも芸術です:) – Eric
私はクエリで質問を更新しました – roymustang86