> Тут есть одна мысль. И очень хочется что бы она оказалась в тему.
>
> О результатах отпишусь :)

Блин, написал сообщение - а оно пропало.

У меня вопрос. Если можно, дайте ответ в упрощенной форме :)

У меня есть 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)

Коваленко Дмитрий.

Ответить