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

Откуда:
Сообщений: 329
Есть несколько больших таблиц, в которых есть поле [Str] varchar(500) без индекса.
Менять структуру и создавать индексы нельзя.
Иногда провожу поиск по этому полю:
select * from [BigTable] where [Str] like '%слово%'

Поиск занимает порядко минуты, что приемлемо.
Возникла необходимость найти все записи, в которых встречается слово из списка в 100 слов.

пока вижу 2 пути:
select * from [BigTable]
where [Str] like '%слово1%'
or [Str] like '%слово2%'
...

либо
select * from [BigTable] where [Str] like '%слово1%' union all
select * from [BigTable] where [Str] like '%слово2%' union all
...

Может у кого-нибудь есть ещё соображения?
19 июн 15, 11:32    [17791493]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
select * from [BigTable]
where [Str] like '%слово[12]%'
19 июн 15, 11:35    [17791516]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
Glory
Member

Откуда:
Сообщений: 104760
=Сергей=
Может у кого-нибудь есть ещё соображения?

Вы знаете что такое join ?
Сможете соеденить [BigTable] с таблицей, в которую предварительно занесете '%слово1%', '%слово2%' и тд ?
19 июн 15, 11:36    [17791524]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
iap, )
19 июн 15, 11:36    [17791529]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Glory,
спасибо большое, сейчас попробую!!
19 июн 15, 11:37    [17791534]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Если искомые фрагменты собраны в поле F таблицы T, то
select * from [BigTable] BT
where EXISTS(SELECT * FROM T WHERE BT.[Str] like '%'+T.F+'%')
19 июн 15, 11:40    [17791558]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
Glory
Member

Откуда:
Сообщений: 104760
=Сергей=
Glory,
спасибо большое, сейчас попробую!!

И если у вас "слово" есть действительно лексема, то давно уже придуман FTS - FullTestSearch
19 июн 15, 11:40    [17791559]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите идею  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Glory,
не подходит, не лексема ;)
19 июн 15, 11:42    [17791568]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить