powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему не используется индекс в запросе..?
8 сообщений из 8, страница 1 из 1
Почему не используется индекс в запросе..?
    #32477473
Pavel Alekseev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть ХП которая делает выборку

create procedure ORDERS_GET(
IDORDER integer)
returns(
NAME varchar(20))
as
begin
for select NAME from ORDERS
where (:IDORDER is null or ID_ORDER = :IDORDER)
into :NAME
do suspend;
end

такая процедура хороша тем, что если нам надо выбрать все заказы или только один, то мы запускаем процедуру с параметром null либо со значением.

и когда запускаем процедуру с известным параметром то в запросе не используется индекс!!!!
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477481
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А индекс как у тебя построен? С учетом Null - ов али нет? Если не, то - не обессудь!
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477496
aPT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то в случае когда сравнивается входной параметр с чем-то в условии where, индексы в FB не используются.
Делай так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 if IDORDER is null  then
  for select NAME from ORDERS into :NAME 
 do suspend; 

 if IDORDER is not null  then
  for select NAME from ORDERS where ID_ORDER = :IDORDER
 into :NAME 
 do suspend; 
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477504
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то в случае когда сравнивается входной параметр с чем-то в условии where, индексы в FB не используются.

Поподробнее можно?
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477580
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mv
Как ты себе представляешь поиск по индексу :IDORDER is null , где IDORDER - переменная ?

Best regards,
Dnico.
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477632
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where (:IDORDER is null or ID_ORDER = :IDORDER)


Ну, с одной стороны - никак, типа, если входная переменная - Null, то (в данном случае) берем все подряд, тут и индекс никакой не нужен, и вторая часть условия (после or) не должна анализироваться...

А если Pavel Alekseev ошибся, и ему нужны все записи с null в поле Id_Order, и записи, совпадабщие с параметрами, то, если он напишет:

where (ID_ORDER is null or ID_ORDER = :IDORDER)

- индекс по id_oreder использоваться будет? Может быть, если он построен с особыми опциями, включающими Null - значения...
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477651
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во втором случае конечно будет использоваться!
Но Pavel Alekseev имел ввиду как раз именно :IDORDER IS NULL.

. автортакая процедура хороша тем, что если нам надо выбрать все заказы или только один, то мы запускаем процедуру с параметром null либо со значением.


Best regards,
Dnico
...
Рейтинг: 0 / 0
Почему не используется индекс в запросе..?
    #32477689
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да, конечно. aPT прав. Ну, тогда, может, так:

Вообще-то в случае когда в WHERE сравнивается входной параметр с чем-то, не являющимся полем таблицы ... индексы в FB не используются
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Почему не используется индекс в запросе..?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]