[英]Oracle behave differently in program and sql developer
我有一個 spring 批處理程序,用於檢查文件中的數據是否存在於 oracle 數據庫中。 通過在 SQL Developer 中調整的推薦步驟,我為表 a 和表 b 添加了 2 個索引。 從 SQL Developer 開始,沒有索引,加載需要 0.5 秒,而索引只有 0.03 秒。 但是,在運行程序時,查詢需要 0.5 秒才能加載。 我嘗試添加提示,使用hash join
和index hint
,但沒有區別。 oracle 似乎沒有選擇索引。 你能幫我解決這個問題嗎?
SQL:
SELECT
pi.PAYMENT_INSTRUCTION_ID,
cft.CFT_FILE_DETAIL_ID
FROM
table_a pi
LEFT JOIN
table_b cft ON pi.id = cft.tabla_a_id
WHERE
pi.internal_trace_number = :traceNumber
AND cft.payer_account_no like :payerAccountNo
AND cft.transaction_amount = :amount;
暗示
SELECT /*+ use_hash */
-- /*+ INDEX(pi IDX$$_0A0F0001) INDEX(cft DX$$_0A0F0002)*/
pi.PAYMENT_INSTRUCTION_ID
, cft.CFT_FILE_DETAIL_ID
FROM table_a pi
LEFT JOIN table_b cft
ON pi.id = cft.tabla_a_id
WHERE pi.internal_trace_number = :traceNumber
AND cft.payer_account_no like :payerAccountNo
AND cft.transaction_amount = :amount;
create index TABLE_A_ID on
TABLE_A (TO_NUMBER("INTERNAL_TRACE_NUMBER"), "CFT_FILE_DETAIL_ID",
"PAYMENT_INSTRUCTION_ID");
create index TABLE_B_ID on
TABLE_B ("PAYER_ACCOUNT_NO", "TRANSACTION_AMOUNT", "CFT_FILE_DETAIL_ID");
create bitmap index join_pi_cft
on TABLE_A(CFT_FILE_DETAIL_ID)
from TABLE_A PI, TABLE_B_ID CFT
WHERE PI.CFT_FILE_DETAIL_ID = CFT.CFT_FILE_DETAIL_ID;
嘗試為以下內容創建索引:
創建這些索引后,查看SQL語句的解釋計划和運行時間。
刪除您現有的三個索引。
運行以下 SQL 語句:
create index table_a_i1 on table_a (internal_trace_number);
create index table_b_i1 on table_b (table_a_id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.