优化此查询?

时间:2011-08-11 06:18:39

标签: sql oracle10g

SELECT MAX (tran_date)
FROM   abc
WHERE  p_id = p_p_id
AND    flag = 'Y'
AND    (   (    p_c_number IS NULL
            AND c_number IS NULL
           )
        OR (c_number = p_c_number)
       )
AND    (   (    p_m_number IS NULL
            AND m_number IS NULL
           )
        OR (m_number = p_m_number)
       )
AND    (   (    p_s_number IS NULL
            AND s_number IS NULL
           )
        OR (s_number = p_s_number)
       );

我使用oracle作为RDBMS,我想优化这个查询

  1. 计划 SELECT STATEMENT ALL_ROWSCost:357 Bytes:39基数:1
    2 SORT AGGREGATE字节:39基数:1
        1表访问全表abc成本:357字节:312基数:8

1 个答案:

答案 0 :(得分:3)

  • 您可以发布查询计划吗?
  • 桌子上有哪些索引?
  • 哪个引用是列名,哪些是绑定变量?我的猜测是P_IDFLAGC_NUMBERM_NUMBERS_NUMBERABCP_P_ID中的列, P_C_NUMBERP_M_NUMBERP_S_NUMBER是绑定变量,但这只是猜测。
  • 各种条件的选择性如何?特别是,表中的哪一部分行具有特定的P_ID值?什么分数有FLAG' Y'?