Как используются индексы при выполнении связанного запроса?
Как используются индексы при выполнении связанного запроса?
Есть запрос
select p.pers_id, p.fio, p.dcreate, p.tcreate,
g.pgruppa, d.department, o.doljnost, f.firma
from departments d, groups g, firms f, occupations o, personnel p
where (p.department_id = d.department_id) and
(p.pgruppa_id = g.pgruppa_id) and
(p.firma_id = f.firma_id) and
(p.doljnost_id = o.doljnost_id)
order by dcreate
Он выполняется достаточно заметное время (порядка 5 секунд).
Без части order by запрос выполняется мгновенно.
Если делать выборку только по главной таблице
select PERS_ID, FIO,dcreate,tcreate
from personnel p
order by dcreate
запрос выполняется мгновенно.
Индекс по полю dcreate и по всем полям для связи таблиц есть.
Кто нибудь может сказать, почему использование связанного запроса
не дает воспользоваться индексом, и как с этим можно бороться?
select p.pers_id, p.fio, p.dcreate, p.tcreate,
g.pgruppa, d.department, o.doljnost, f.firma
from departments d, groups g, firms f, occupations o, personnel p
where (p.department_id = d.department_id) and
(p.pgruppa_id = g.pgruppa_id) and
(p.firma_id = f.firma_id) and
(p.doljnost_id = o.doljnost_id)
order by dcreate
Он выполняется достаточно заметное время (порядка 5 секунд).
Без части order by запрос выполняется мгновенно.
Если делать выборку только по главной таблице
select PERS_ID, FIO,dcreate,tcreate
from personnel p
order by dcreate
запрос выполняется мгновенно.
Индекс по полю dcreate и по всем полям для связи таблиц есть.
Кто нибудь может сказать, почему использование связанного запроса
не дает воспользоваться индексом, и как с этим можно бороться?
План запроса такой...
План запроса
Plan
PLAN SORT (JOIN (D NATURAL,P INDEX (DEPARTMENT_ID),O INDEX (OCCUPATIONS_ID),F INDEX (FIRMS_FIRMA_ID),G INDEX (GROUPS_PGRUPPA_ID)))
Adapted Plan
PLAN SORT (JOIN (D NATURAL,P INDEX (DEPARTMENT_ID),O INDEX (OCCUPATIONS_ID),F INDEX (FIRMS_FIRMA_ID),G INDEX (GROUPS_PGRUPPA_ID)))
Использую FB-1.0.2.
А что можно подкрутить и где?
Plan
PLAN SORT (JOIN (D NATURAL,P INDEX (DEPARTMENT_ID),O INDEX (OCCUPATIONS_ID),F INDEX (FIRMS_FIRMA_ID),G INDEX (GROUPS_PGRUPPA_ID)))
Adapted Plan
PLAN SORT (JOIN (D NATURAL,P INDEX (DEPARTMENT_ID),O INDEX (OCCUPATIONS_ID),F INDEX (FIRMS_FIRMA_ID),G INDEX (GROUPS_PGRUPPA_ID)))
Использую FB-1.0.2.
А что можно подкрутить и где?
Re: План запроса такой...
g.pgruppa, d.department, o.doljnost, f.firma
эти поля случаем не varchar/char размером так по 1000 символов?
И сколько запрос выполняется без сортировки?
эти поля случаем не varchar/char размером так по 1000 символов?
И сколько запрос выполняется без сортировки?
re
Случаем да, не то чтобы по 1000, но по 100, по 200 символов. Но запрос с этими полями, но без сортировки выполняется моментально (порядка 15 милисекунд).
Раньше все было в одной таблице, и проблем не было. Но решили сделать правильно и результат оказался плачевен...
Раньше все было в одной таблице, и проблем не было. Но решили сделать правильно и результат оказался плачевен...
Re: re
Берём число записей в запросе и смотрим какой массив данных нужно отсортировать, особо учитыая суммарный размер записи в результирующем запросе - делаем ВЫВОДЫ.bill_2000 писал(а):Случаем да, не то чтобы по 1000, но по 100, по 200 символов. Но запрос с этими полями, но без сортировки выполняется моментально (порядка 15 милисекунд).
Re:
Запрос с той же сортировкой только по главной таблице - происходит моментально, хотя количество записей то же. Когда поля department, firma и пр. находились в главной таблице, сортировка происходила моментально, хотя суммарный размер записи был примерно такой же.Oleg Loa писал(а): Берём число записей в запросе и смотрим какой массив данных нужно отсортировать, особо учитыая суммарный размер записи в результирующем запросе - делаем ВЫВОДЫ.
Поэтому ВЫВОД мне пока не понятен.
Чем дело кончилось
Что забавно, все исправилось, когда я убрал индексы в главной таблице по идентификаторам словарных полей. Тут же исчез натурал, и выборка стала осуществляться за 15 милисекунд. Как бы это еще понять...