План запроса индекс нехватает...

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

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

Ответить
aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

План запроса индекс нехватает...

Сообщение aleks26rus » 31 авг 2005, 15:01

Здраствуй, All!
Есть запрос
select t1.* from "apple_TMP" t1
where t1."bsch"||t1."hvost" not in (select t2."s20" from "s13_20" t2)

В автомате индекс для t2.s13_20 подхватывается а составной индекс для
t1."bsch"||t1."hvost" - нет. Пытаюсь ручками прописать план:
select t1.* from "apple_TMP" t1
where t1."bsch"||t1."hvost" not in (select t2."s20" from "s13_20" t2 PLAN (T2 INDEX (S13_20_S20)) )
PLAN (T1 index(apple_tmp_idx4) )
говорит:
index cannot be used in the specified plan
.
index APPLE_TMP_IDX4 cannot be used in the specified plan.

Тоесть составной индекс при конкатенации строк читать нежалает... Соответственно вопрос: как бы его заставить читать, а то в одной таблице 190т. строк а во второй 80т.строк....
Мож подскажите чего....

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 31 авг 2005, 15:13

Конкатенация есть выражение, а не два поля. Что индекс по интам (ID,IDParent) не подхватится по условию where ID+IDParent изумления не вызывает? Варианты:

а) Если запросы такого типа регулярны, вести конкатенацию дополнительным полем в before триггерах и слепить по нему индекс
б) Если разовые - забить и потерпеть изредка
в) Ждать FB2 с индексами по выражениям

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 31 авг 2005, 15:36

вот любитель кросспостинга ведь...

aleks26rus
Сообщения: 7
Зарегистрирован: 24 авг 2005, 17:32

Сообщение aleks26rus » 31 авг 2005, 15:43

dimitr писал(а):вот любитель кросспостинга ведь...
Ну дык .... :)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 31 авг 2005, 15:52

Иэхх, надо таки было канделябром, лоханулся...

Ответить