> Тут есть одна мысль. И очень хочется что бы она оказалась в тему.
>
> О результатах отпишусь :)
Блин, написал сообщение - а оно пропало.
У меня вопрос. Если можно, дайте ответ в упрощенной форме :)
У меня есть 4 поля - ID, CLASS, TXT_ID, TYPE_TXT_CONTENT
ID,CLASS - это идентификатор объекта
TXT_ID - идентификатор лексемы
TYPE_TXT_CONTENT - это номер секции текстового индекса
На эти поля наложен UNIQUE_OBJECT_TXT_CONTENT. Порядок перечисления
такой же: ID,CLASS,TXT_ID,TYPE_TXT_CONTENT
В запросе я указываю значения CLASS, TXT_ID, TYPE_TXT_CONTENT. Сервер
радостно объявляет, что он задействует в плане этот UNIQUE. Если быть
совсем точным, то запрос такой
select c1.id,c1.class
from OBJECT_TXT_CONTENT c1
join OBJECT_TXT_CONTENT c2
on (c1.id=c2.id and c1.class=c2.class)
join OBJECT_TXT_CONTENT c3
on (c2.id=c3.id and c2.class=c3.class)
where (((c1.txt_id=:c1 and c1.type_txt_content=2000 and c1.class=2000)
or
(c1.txt_id=:c1 and c1.type_txt_content=2001 and
c1.class=2000)) and
((c2.txt_id=:c2 and c2.type_txt_content=2000 and c2.class=2000)
or
(c2.txt_id=:c2 and c2.type_txt_content=2001 and
c2.class=2000)) and
((c3.txt_id=:c3 and c3.type_txt_content=2000 and c3.class=2000)
or
(c3.txt_id=:c3 and c3.type_txt_content=2001 and
c3.class=2000)))
PLAN JOIN (C1 INDEX (UNIQUE_OBJECT_TXT_CONTENT,
UNIQUE_OBJECT_TXT_CONTENT),
C2 INDEX (UNIQUE_OBJECT_TXT_CONTENT,
UNIQUE_OBJECT_TXT_CONTENT),
C3 INDEX (UNIQUE_OBJECT_TXT_CONTENT,
UNIQUE_OBJECT_TXT_CONTENT))
Запрос отрабатывает _относительно_ быстро.
Я поменял порядок следования полей в UNIQUE
(TXT_ID,TYPE_TXT_CONTENT,CLASS,ID) - субъективно быстрее работать не
стало. Хотя ожидал что станет отрабатывать мгновенно :)
Вопрос такой - какой порядок полей в UNIQUE более благоприятен для
вышеуказанного запроса и его плана? Или без разницы. Сам я склоняюсь,
что "правильным" является (TXT_ID,TYPE_TXT_CONTENT,CLASS,ID)
Коваленко Дмитрий.