Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 select и contain  [new]
tikkurilla
Member

Откуда:
Сообщений: 23
Доброе время суток!
есть таблица содержащая id и genotip с кучей информации на лицо.
строю доменный индекс по genotip и делаю контекстный поиск.
Вопрос: какой запрос "правильнее"?
select idl, genotip, score(1), score(2),score(3)
 from t_lico where contains(genotip,'ИВАНО%',1)>0 and
                   contains(genotip,'ИВА%',2)>0 and
                   contains(genotip,'%ЧЕРНЫ%',3)>0
order by score(1) desc, score(2) desc, score(3) desc

или
select idl, genotip, score(1)
 from t_lico where contains(genotip,'ИВАНО% AND ИВА% and %ЧЕРНЫ%',1)>0 
order by score(1) desc

чисто експериментально установлено, что первый выбирает больше записей.
Хотелось бы мнение знающих...

Далее: помимо "нужных" записей выбирается еще "мусор" - записи, где есть вхождение только некоторых поисковых значений.
Чтобы их отсеять делаю вот так:
select distinct a.idl, score(1)
from t_loco a 
where (case when contains(genotip,'ИВАНО%',1)>0 then 1 else 0 end)+
(case when contains(genotip,'ИВАНО%',2)>0 then 1 else 0 end)>[определенное число]

заметил, что запрос выполняется довольно долго, глянул план, а он индекс не использует!
В результате експериментов выяснилось, что как только начинаю "плюсовать кейсы", индекс не используется,
однако вот в конструкции, когда всего один кейс, индекс цепляется.
Почему?
30 июл 12, 13:55    [12934571]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
-2-
Member

Откуда:
Сообщений: 15330
tikkurilla
"правильнее"?
от перестановки мест сумма может поменяться, даже когда одно является частю второго.
Но если не сам не знаешь, какой запрос "правильный", значит сам неправильный.
30 июл 12, 14:02    [12934622]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
tikkurilla,

первый вариант дотачивайте (например, прицепите к нему второй)
30 июл 12, 14:04    [12934640]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
tikkurilla
Member

Откуда:
Сообщений: 23
-2-
от перестановки мест сумма может поменяться, даже когда одно является частю второго.
Но если не сам не знаешь, какой запрос "правильный", значит сам неправильный.

я ж вроде совета просил....
30 июл 12, 14:13    [12934716]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
tikkurilla
Member

Откуда:
Сообщений: 23
orawish,
так я с первым и стал кейсы мутить...
вот я и спрашиваю почему "сумма кейсов" не использует индекс?
может какой то другой вариант "отсева" лишних записей?
30 июл 12, 14:16    [12934740]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
tikkurilla
orawish,
так я с первым и стал кейсы мутить...
вот я и спрашиваю почему "сумма кейсов" не использует индекс?
может какой то другой вариант "отсева" лишних записей?

думаю, кейс (сам по себе) не виноват. просто арифметика индексам перпендикулярна (и противопоказана).
я вам предложил тупо клеить предикаты - один ~быстрый, второй ~правильный - примените их вместе
30 июл 12, 14:23    [12934809]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
tikkurilla
Member

Откуда:
Сообщений: 23
orawish,
наверное сказывается конец рабочего дня....
не понимаю...
30 июл 12, 14:33    [12934899]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
tikkurilla,

~
select idl, genotip, ..
 from t_lico 
where contains(genotip,'ИВАНО%',1)>0 
  and contains(genotip,'ИВАНО% AND ИВА% and %ЧЕРНЫ%',1)>0 
30 июл 12, 14:37    [12934928]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
tikkurilla
Member

Откуда:
Сообщений: 23
может непонятно объяснил запрос, надо типа выбрать ИВАНОВЫХ ИВАНОВ или ИВАНОВИЧЕЙ проживающих на улице ЧЕРНЫХ в строке, где склеены ФИО, дата рождения, адрес и пр...
31 июл 12, 05:55    [12938138]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
tikkurilla
может непонятно объяснил запрос, надо типа выбрать ИВАНОВЫХ ИВАНОВ или ИВАНОВИЧЕЙ проживающих на улице ЧЕРНЫХ в строке, где склеены ФИО, дата рождения, адрес и пр...

ну примерно так я вашу задачу и понял.
что я хотел сказать: попробуйте задачу решать в два шага. на первом шаге надо попробовать быстро (за счет индекса) значительно уменьшить набор данных, пусть даже и результат этого шага не будет точен (т.е. будет избыточен). к полученному набору можно дальше, последовательно применить ~любые затратные, но более точные (в смысле требуемого) предикаты
31 июл 12, 13:06    [12940082]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
-2-
Member

Откуда:
Сообщений: 15330
orawish
надо попробовать быстро (за счет индекса)
разбиение на два условия WHERE индексность не повысит.
31 июл 12, 13:59    [12940677]     Ответить | Цитировать Сообщить модератору
 Re: select и contain  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
-2-
orawish
надо попробовать быстро (за счет индекса)
разбиение на два условия WHERE индексность не повысит.
вполне допускаю. ну так можно (видя цель) искать варианты, например материализацию первого шага рассмотреть
31 июл 12, 14:05    [12940733]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить