powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не используется индекс....
6 сообщений из 6, страница 1 из 1
Не используется индекс....
    #32086888
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема:

Есть таблица FAMILY с ключом ID, по полю RN построен ключ. Привыполнении следующего запроса индек по полю rn не используется
select s.dsex,f.lname||' '||f.fname as fio from family f
left join sex s on s.sex = f.sex
order by f.rn


план для него
PLAN SORT (JOIN (F NATURAL,S INDEX (PK_SEX)))

====================

вот другой запрос:
select s.dsex,f.lname||' '||f.fname as fio from family f
left join sex s on s.sex = f.sex
where f.rn like '98%'


план для него
PLAN JOIN (F INDEX (FAMILY_IDX_RN),S INDEX (PK_SEX))

Здесь индек используется....


Вопрос:
1. Почему в одном случае используется индек а в другом нет? это ошибка оптимизатора?
2. Можно ли как то указать использовать этот индекс?
...
Рейтинг: 0 / 0
Не используется индекс....
    #32086889
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...и еще: используется FB 1.0.2.908
...
Рейтинг: 0 / 0
Не используется индекс....
    #32087371
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понял. По моему, оба плана наилучшим образом соответствуют запросам ...
...
Рейтинг: 0 / 0
Не используется индекс....
    #32087453
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это что ж значит... при сортировке по полю индекс и не должен использоваться??
...
Рейтинг: 0 / 0
Не используется индекс....
    #32087533
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, во втором запросе индекси используется не для сортировки и эти запросы сравнивать некорректно.

Во-вторых, насколько я понимаю, сначала происходит соединение, а потом сортировка и оптимизатор действительно не умеет в таких случаях использовать индекс. Советую заменить на запрос с подзапросом:
Код: plaintext
1.
2.
3.
select f.lname||' '||f.fname as fio,
(select dsex from sex s where s.sex=f.sex) as dsex,
from family f 
order by f.rn 


В третьих, FB достаточно плохо выполняет сотировку, по сравнению с Дятлом. Улучшен ли в этом плане оптимизатор в FB1.5 и как к такому запросу вручную прикрутить хороший план - спрашивайте у господина Еманова на конференции news://forums.demo.ru/epsylon.public.interbase
...
Рейтинг: 0 / 0
Не используется индекс....
    #32088054
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое за помощь...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не используется индекс....
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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