Hello, Дмитрий!

Дмитрий Студинский wrote:

> where ((FTI.Files_Type between 100000 and 199999)
> or (FTI.Files_Type between 300000 and 399999))
> 
> При этом строится план (Имя индекса = IX_ИмяТаблицы_ИмяПоля)
> PLAN JOIN (F NATURAL,FP INDEX (IX_FILES_PUBLISHER_file_id),FTI INDEX
> (IX_FILES_TYPE_ID_file_id,IX_FILES_TYPE_ID_files_type,IX_FILES_TYPE_ID_files_type))

оптимизатор из-за OR взял IX_FILES_TYPE_ID_files_type два раза, должен выбрать
множества ключей и слить их по OR. Если

> Прописываю план
> PLAN JOIN (F NATURAL,FP INDEX (IX_FILES_PUBLISHER_file_id),FTI INDEX
> (IX_FILES_TYPE_ID_file_id))
> 
> Полная выборка занимает 2сек

то получается, что именно оно и виновато.

> Пока что в условиях прописал FTI.Files_Type + 1. Но хотелось бы услышать
> почему сервак так начинает мучаться? Может вообще удалить ненужные индексы?
> 
> ЗЫ Версия сервера 1.5.3.4870
> Статистика по индексам

это если ты недавно set statistics index делал.

> IX_FILES_TYPE_ID_files_type = 0,011494252830744

не фонтан. IBAnalyst тебе лучше скажет, нормальный это индекс или нет.
В целом нет, особенно если в between много ключей попадает, да
еще и по or. Так что ты +0 правильно сделал.

-- 
Dmitri Kuzmenko, www.ibase.ru, (495) 953-13-34

Ответить