Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не используется индекс.... / 6 сообщений из 6, страница 1 из 1
06.01.2003, 09:51
    #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
06.01.2003, 10:03
    #32086889
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется индекс....
...и еще: используется FB 1.0.2.908
...
Рейтинг: 0 / 0
08.01.2003, 12:53
    #32087371
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется индекс....
Ничего не понял. По моему, оба плана наилучшим образом соответствуют запросам ...
...
Рейтинг: 0 / 0
08.01.2003, 14:24
    #32087453
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется индекс....
это что ж значит... при сортировке по полю индекс и не должен использоваться??
...
Рейтинг: 0 / 0
08.01.2003, 15:17
    #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
09.01.2003, 12:35
    #32088054
Дегтярев Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не используется индекс....
Спасибо большое за помощь...
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не используется индекс.... / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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