Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Zhur
- Сообщения: 125
- Зарегистрирован: 01 мар 2006, 18:17
Сообщение
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
Спасибо... код процедуры я уже переработал.