Почему сравнение переменных работает медленно? - PullRequest
0 голосов
/ 27 июня 2019

Одна из моих процедур вызывает вызов функции и связывает возвращаемое значение с переменной.Пожалуйста, посмотрите ниже:

Этот запрос выполняется в рамках процедуры.

старый запрос

--lc_tmp_year  is variable declare at procedure level
--this call taking 3 secs to execute
lc_tmp_year = EmpPackage.GetEmployeeCodeYear(emp_id);

select * from employeePlans
where code_year = lc_tmp_year;

новый запрос

--this running faster than the above one - within secs
select * from employeePlans
where code_year = EmpPackage.GetEmployeeCodeYear(emp_id);;

Я удивленпочему новый запрос выполняется быстрее, чем старый.

У кого-нибудь была подсказка?

1 Ответ

0 голосов
/ 27 июня 2019

Что ж, это может быть тот оптимизатор запросов в новом запросе, который может видеть связь с employee и может выполнять оптимизацию с внутренним внутренним объединением, за сценой и, кроме того, может использовать возможные индексы.,В старом запросе для выбора оператора присутствует чистое значение lc_tmp_year , а в некотором плохом случае оно в основном выполняет последовательное сравнение по всему отношению employeePlans или, по крайней мере, с неиспользуемыми опциями индексации, которые используютсяв новом запросе, что в конце подразумевает лучший результат для нового запроса.Конечно, все зависит от операторов DDL для создания базы данных и конкретных отношений, но если у вас есть такие результаты, это может быть объяснением.

...