Оптимизировать этот запрос? - PullRequest
0 голосов
/ 11 августа 2011
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 в качестве СУБД, я хочу оптимизировать этот запрос

  1. План ВЫБЕРИТЕ ЗАЯВЛЕНИЕ ALL_ROWSCost: 357 Байт: 39 Количество элементов: 1
    2 SORT AGGREGATE Байт: 39 Количество элементов: 1
    1 ТАБЛИЦА ДОСТУПА ПОЛНЫЙ СТОЛ abc Стоимость: 357 Байт: 312 Количество элементов: 8

1 Ответ

3 голосов
/ 11 августа 2011
  • Можете ли вы опубликовать план запроса?
  • Какие индексы существуют в таблице?
  • Какие из ссылок являются именами столбцов, а какие переменными связывания? Я предполагаю, что P_ID, FLAG, C_NUMBER, M_NUMBER и S_NUMBER являются столбцами в ABC, а P_P_ID, P_C_NUMBER, P_M_NUMBER и P_S_NUMBER являются переменные, но это только предположение.
  • Насколько избирательны различные условия? В частности, какая доля строк в таблице имеет конкретное значение P_ID? Какая фракция имеет FLAG из 'Y'?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...