Запрос внутреннего соединения - оракул

Я пытаюсь запустить следующий запрос в UAT, который дает мне очень быстрый результат, но приходит к производству, где у нас около 10 миллионов запросов записей, занимающих слишком много времени. Есть ли лучший способ сделать это.

SELECT w.row_id,
       w.field_1,
       w.field_2,
       w.field_3,
       b.row_id,
       b.field_1,
       b.field_2,
       b.field_3
  FROM si.table1 w
       INNER JOIN si.table1 b
          ON     w.par_row_id = b.par_row_id
             AND w.field_1 = b.field_1
             AND w.field_3 = b.field_3
 WHERE     w.field4 = 'TEXT1'
       AND b.field4 = 'TEXT1'
       AND UPPER (w.field_2) = 'TEXT2'
       AND UPPER (b.field_2) = 'TEXT3'

sql,oracle,

0

Ответов: 1


0

Для этого запроса:

SELECT . . .
FROM si.table1 w INNER JOIN
     si.table1 b
     ON w.par_row_id = b.par_row_id AND
        w.field_1 = b.field_1 AND
        w.field_3 = b.field_3 AND
        w.field4 = b.field4
WHERE w.field4 = 'TEXT1' AND
      UPPER(w.field_2) = 'TEXT2' AND
      UPPER(b.field_2) = 'TEXT3';

Вам нужна стратегия индексирования. Я бы пошел table1(field4, upper(field_2), par_row_id, field_1, field_3, field4)и table1(par_row_id, field_1, field_3, field_4, upper(field2)).

SQL, Oracle,
Похожие вопросы
Яндекс.Метрика