Настройка Oracle Query для медленного выбора - PullRequest
1 голос
/ 25 сентября 2019

Я работаю над оракульным запросом, который выполняет выборку для огромной таблицы, однако объединения с другими таблицами, похоже, стоят очень дорого с точки зрения времени обработки.

Я ищусоветы о том, как улучшить работу этого запроса.

Я прилагаю версию запроса и план его объяснения.

Запрос

 SELECT
    l.gl_date,
    l.REST_OF_TABLES
    (
        SELECT
            MAX(tt.task_id)
        FROM
            bbb.jeg_pa_tasks tt
        WHERE
            l.project_id = tt.project_id
            AND l.task_number = tt.task_number
    ) task_id
FROM
    aaa.jeg_labor_history   l,
    bbb.jeg_pa_projects_all     p
WHERE
    p.org_id = 2165
    AND l.project_id = p.project_id
    AND p.project_status_code = '1000'

explain plan

Кое-что упомянуть: этот запрос берет данные от oracle для отправки их в базу данных сервера sql, поэтому мне нужно, чтобы они были такими большими, я не могу сузить область действиязапроса.цель состоит в том, чтобы настроить его на работу сервера sql с SSIS, чтобы он периодически запускался

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Одно очевидное предложение - не использовать подзапрос в предложении select.

Вместо этого вы можете попытаться объединить таблицы.

SELECT
    l.gl_date,
    l.REST_OF_TABLES
    t.task_id
FROM
    aaa.jeg_labor_history   l
    Join bbb.jeg_pa_projects_all p
    On (l.project_id = p.project_id)
    Left join (SELECT
        tt.project_id, 
        tt.task_number,
        MAX(tt.task_id) task_id
    FROM
        bbb.jeg_pa_tasks tt
    Group by tt.project_id, tt.task_number) t
    On (l.project_id = t.project_id
            AND l.task_number = t.task_number)
WHERE
    p.org_id = 2165
    AND p.project_status_code = '1000';

Cheers !!

1 голос
/ 25 сентября 2019

Поскольку я не знаю точно, сколько строк возвращает этот запрос или сколько строк имеет эта таблица / представление.

Я могу дать вам несколько простых советов, которые могут быть полезны для повышения производительности запросов:

  1. Проверка индексов.Должны быть индексы для всех полей, используемых в частях WHERE и JOIN инструкции SQL.

  2. Ограничить размер вашего рабочего набора данных.

  3. Выбирайте только те столбцы, которые вам нужны.

  4. Удалите ненужные таблицы.

  5. Удалить вычисляемые столбцы в предложениях JOIN и WHERE.

  6. Использовать внутреннее соединение вместо внешнего соединения, если это возможно.

В вашем просмотре содержится много данных, поэтому вы также можете разбивать и ограничивать только ту информацию, которая вам нужна из этого представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...