Страница 1 из 1

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

Добавлено: 10 май 2006, 15:03
Zhur
Кто-нить подскажет, почему в плане такой ХП не используются индексы?

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

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 имеется?
Заранее благодарен.

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

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

Добавлено: 11 май 2006, 14:52
Zhur
Спасибо... код процедуры я уже переработал.