Оптимизация запроса путем удаления отдельных ключевых слов - PullRequest
0 голосов
/ 05 апреля 2019

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

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

Текущий код с отдельным ключевым словом: -

select distinct dm.strdatadest 
            from PUBLIC.temp te1
            JOIN PUBLIC.applicationconfiguration AC on AC.intapplicationid = te1.applicationid
            JOIN columnmapping cm on cm.intapplicationid = AC.intapplicationid
            JOIN datamapping dm on lower(dm.strcolumnsource) = lower(cm.strcolumnsource)
            JOIN srctable s on s.applicationid=AC.intapplicationid
            where lower(cm.strtablesource) = lower(s.tablename) and 
            lower(dm.strdatasource) = lower('||quote_literal(rec.status) ||') and lower( dm.strcolumndest ) LIKE ''strstatus'' and te1.applicationid='||quote_literal(rec.applicationid);

Попытка кода путем удаления отдельного ключевого слова: -

select  dm.strdatadest
from PUBLIC.temp te, 
PUBLIC.applicationconfiguration AC,
            PUBLIC.columnmapping cm,
            PUBLIC.datamapping dm
            where AC.intapplicationid = te.applicationid and cm.intapplicationid = AC.intapplicationid and lower(dm.strcolumnsource) = lower(cm.strcolumnsource)
            and lower(cm.strtablesource) = lower(s.tablename) and 
            lower(dm.strdatasource) = lower('||quote_literal(rec.priority) ||') and lower( dm.strcolumndest ) LIKE ''strpriority'' and te1.applicationid='||quote_literal(rec.applicationid)
            GROUP BY dm.strdatadest;

Мне потребовалось некоторое суждение, чтобы настроить запрос, удалив отдельное ключевое слово

1 Ответ

0 голосов
/ 05 апреля 2019

В вашем запросе есть два момента, которые следует упомянуть

  1. неявное соединение против явного соединения, которое примерно имеет такую ​​же производительность.

люди часто спрашивают, есть ли разница в производительности между неявными и явными объединениями. Ответ: «Обычно нет»

  1. отличается от группы, в которой различается является оптимальным для использования памяти, а группируется по оптимально для скорости, поэтому последний превосходит первый, но при необходимости требует большого объема памяти.

Отличный подход выполнен как:

  • Скопировать все значения business_key во временную таблицу

  • Сортировка временной таблицы

  • Сканирование временной таблицы, возвращая каждый элемент, отличный от предыдущего

Группу можно выполнить следующим образом:

  • Сканирование полной таблицы, сохраняя каждое значение бизнес-ключа в хеш-таблице

  • Вернуть ключи хеш-таблицы

Проницательное объяснение по ссылкам ниже.

неявное соединение против явного соединения

отличается от группы по

...