Natural в SELECT, который в ХП

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Natural в SELECT, который в ХП

Сообщение Zhur » 10 май 2006, 15:03

Кто-нить подскажет, почему в плане такой ХП не используются индексы?

Код: Выделить всё

CREATE PROCEDURE ADRPREF_PREF2ID (PREF VARCHAR(25))
RETURNS (ID INTEGER)
AS begin
  ID = NULL;
  if ( EXISTS(SELECT AP.ID FROM "ADRPREF" AP
                   WHERE AP.PREF LIKE :PREF) ) then
    SELECT AP.ID FROM "ADRPREF" AP
    WHERE AP.PREF LIKE :PREF INTO :ID;
  suspend;
end
Таблица ADRPREF насчитывает около 100 записей.
Аналогичным способом делается подобный возврат ID в других таблицах... но там индексы используются. Не пойму почему.
Индекс по ADRPREF.PREF имеется?
Заранее благодарен.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 10 май 2006, 15:46

1. пользуйся тегом Code
2. твой if exists(a) then a - это масло масляное
3. like с параметром не может использовать индексы. никогда

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 май 2006, 17:17

и еще:
1. тег code я добавил
2. set term убрал
3. выкинь IBConsole, используй IBExpert или аналогичное
4. не используй имена объектов в двойных кавычках - ничего кроме геморроя это не даст.
5. у ХП нет никакого "плана". план есть только у запросов. План хп - это суммарный план всех запросов, которые в ней написаны.

Zhur
Сообщения: 125
Зарегистрирован: 01 мар 2006, 18:17

Сообщение Zhur » 11 май 2006, 14:52

Спасибо... код процедуры я уже переработал.

Ответить