Почему Natural и нужно ли лепить свой план ?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
AndriyKo
Сообщения: 9
Зарегистрирован: 12 мар 2005, 02:22

Почему Natural и нужно ли лепить свой план ?

Сообщение AndriyKo » 24 сен 2005, 14:19

FB 1.5. IBX. В проге часто выполняется запрос вида

Код: Выделить всё

 Select First m Skip n * From GoodsT Where ShowIF>=:ShowP Order By NameCF,DateDF Descending,CodeIF 
В табличке около 20000 записей. Главное требование - побыстрей выдернуть требуемую порцию данных. Индексы на поля NameCF и DateDF есть, а CodeIF - это PK. Запрос идёт натуралом, вот я и спрашую - можно ли, и, главное, нужно ли заставить его выполняться с использованием индекса ? Составной индекс вида

Код: Выделить всё

Create Index SomeI On GoodsT(NameCF,DateDF,CodeIF)
я пробовал, но он тоже не цепляется, видимо, из-за того, что в запросе DateDF Desc ? Или потому, что разнотипные поля ?
На всякий даю статистику индексов
NameCF (VarChar(100)) - 0.0000419691...
CodeIF (Integer) - 0.0000403469...
DateDF (Date) - 0.000792393....

В обчем, или разжуйте, плиз, или ткните носом в где почитать. Спасибо.

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Почему Natural и нужно ли лепить свой план ?

Сообщение hvlad » 24 сен 2005, 19:33

AndriyKo писал(а):FB 1.5. IBX. В проге часто выполняется запрос вида

Код: Выделить всё

 Select First m Skip n * From GoodsT Where ShowIF>=:ShowP Order By NameCF,DateDF Descending,CodeIF 
В табличке около 20000 записей. Главное требование - побыстрей выдернуть требуемую порцию данных. Индексы на поля NameCF и DateDF есть, а CodeIF - это PK. Запрос идёт натуралом, вот я и спрашую - можно ли, и, главное, нужно ли заставить его выполняться с использованием индекса ? Составной индекс вида

Код: Выделить всё

Create Index SomeI On GoodsT(NameCF,DateDF,CodeIF)
я пробовал, но он тоже не цепляется, видимо, из-за того, что в запросе DateDF Desc ?
Не полный индекс для ORDER BY использовать нет смысла, т.к. потом всё равно нужно делать сортировку

Составной не используется конечно из-за DESC. Не пробовал убрать DESC и посмотреть ?

AndriyKo
Сообщения: 9
Зарегистрирован: 12 мар 2005, 02:22

Re: Почему Natural и нужно ли лепить свой план ?

Сообщение AndriyKo » 26 сен 2005, 11:15

hvlad писал(а):Составной не используется конечно из-за DESC. Не пробовал убрать DESC и посмотреть ?
Пробовал. Индекс используется. Но мне -то надо с Desc. Как быть ?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: Почему Natural и нужно ли лепить свой план ?

Сообщение hvlad » 26 сен 2005, 12:17

AndriyKo писал(а):
hvlad писал(а):Составной не используется конечно из-за DESC. Не пробовал убрать DESC и посмотреть ?
Пробовал. Индекс используется. Но мне -то надо с Desc. Как быть ?
Если очень нужно, то можно создать служебное поле, обновляемое триггерами, и индексировать его.
Или попробовать expression indexes в FB2, правда я не уверен что он будет использован для ORDER BY

AndriyKo
Сообщения: 9
Зарегистрирован: 12 мар 2005, 02:22

Re: Почему Natural и нужно ли лепить свой план ?

Сообщение AndriyKo » 26 сен 2005, 12:58

hvlad писал(а):Если очень нужно, то можно создать служебное поле, обновляемое триггерами, и индексировать его.
Блин, не мог сам додуматься. Спасибо, Влад, попробую.

Ответить