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

Откуда:
Сообщений: 36
Добрый день!

есть сложный запрос

сложные места (scan в миллионострочной бд):

1. WHERE search_text_sys like '%432596%' and like '%ddd%'
2. WHERE sysname like like '%432596%' and like '%ddd%'

вобщем это всё тормозит безбожно.
а запрос с параметром из одного символа '7' вообще раком вешается, т.к. вхождения во многие строки получает.

как быть..?!
фулл текст индекс помоему не дает полного аналога лайк.
подскажите пожалуйста


сразу второй вопрос задам:
ORDER BY CASE WHEN lvl IS NULL THEN 1 ELSE 0 END, dbo.id_andmin_lvl_no.lvl, dbo.id_andmin_lvl_no.no

т.е. идет сортировка по значению ключей, размещенных в другой таблице..
это возможно ли как то оптимизировать или итак неплохо?


оригинал запроса:

SELECT TOP (100) PERCENT sid.id, dbo.id_andmin_lvl_no.lvl, dbo.id_andmin_lvl_no.no
FROM (SELECT id
FROM dbo.A_SearchData
WHERE search_text_sys like '%432596%'
UNION
SELECT ID
FROM dbo.[ALL]
WHERE sysname like '%dddd%' AS sid LEFT OUTER JOIN
dbo.id_andmin_lvl_no ON sid.id = dbo.id_andmin_lvl_no.id
ORDER BY CASE WHEN lvl IS NULL THEN 1 ELSE 0 END, dbo.id_andmin_lvl_no.lvl, dbo.id_andmin_lvl_no.no
12 мар 14, 12:48    [15709552]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
int9
Member

Откуда:
Сообщений: 36
о fulltext
я имею ввиду следующ проблему

It is possible to use the wildcard "*" at the end of the word or phrase (prefix search).

For example, this query will find all "datab", "database", "databases" ...

SELECT * FROM SomeTable WHERE CONTAINS(ColumnName, '"datab*"')
But, unforutnately, it is not possible to search with leading wildcard.

For example, this query will not find "database"

SELECT * FROM SomeTable WHERE CONTAINS(ColumnName, '"*abase"')
12 мар 14, 13:24    [15709922]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
int9
как быть..?!

Не делать поиск по подстроке. Делать по началу строки

int9
т.е. идет сортировка по значению ключей, размещенных в другой таблице..
это возможно ли как то оптимизировать или итак неплохо?

Оптимизировать текст запроса ? Или его какой-то физический пареметр - время выполнения, потребление процессора, памяти ?

CASE WHEN lvl IS NULL THEN 1 ELSE 0 END - какой смысл замены NULL на 0, если при сортировке NULL и так интерпретируются как самые малые значения ?
12 мар 14, 13:26    [15709939]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
int9
Member

Откуда:
Сообщений: 36
Glory,

дело в том , что мне надо сперва числовые значения взять, они приоритет имеют над пустыми - в них есть интерес.
а уже потом следом показывать остаточный результат
12 мар 14, 13:30    [15709992]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Что делать, когда Full-Text бессилен или зарисовки на тему LIKE '%искомое%'
12 мар 14, 13:31    [15709995]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
int9
дело в том , что мне надо сперва числовые значения взять, они приоритет имеют над пустыми - в них есть интерес.
а уже потом следом показывать остаточный результат

Какое отношение это имеет к поиску именно подстрок ?
12 мар 14, 13:34    [15710028]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
int9
Member

Откуда:
Сообщений: 36
Glory,

делаем лайк "хх", получаем 1000000 вхождений..

оператору такой результат не нужен. ему нужны Интересные вхождения, поэтому прицепом идет сортировка. и параметр select Top в шапку запроса чтобы взять 1000 интересных строк.
12 мар 14, 13:36    [15710043]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
int9
оператору такой результат не нужен. ему нужны Интересные вхождения, поэтому прицепом идет сортировка. и параметр select Top в шапку запроса чтобы взять 1000 интересных строк.

Внимание, еще раз вопрос - почему нужны именно _подстроки_, а не строки, начинающиеся с заданной ?
12 мар 14, 13:38    [15710059]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
int9
Member

Откуда:
Сообщений: 36
Glory,

поиск с заданного начала не возможен (т.е. не могу применить like 'XXXA%', таблица содержит очень много одинаковых вступлений, и в результате база ответа не даст

вступления одинаковые опять же не смогу убрать.. кто-то может начать искать со вступления, т.е. вступление тоже имеет смысл.

1. сироп 1л лук карандаш XxA 11024 1280
2. сироп 1л чеснок карандаш 11024 1280
3. сироп 1л вишня карандаш 11024 1280

о разбивках:
1. предложено - разбить по словам и сбросить эти слова в отдельную базу и уже по ней делать like '%x%' ? скорей всего будет быстрее работать, т.к. строки будут короче, легче сканить..

2. но есть и проблема при этом , допустим юзер вводит луккарандаш без пробела (неграмотный юзер), ну или "карандашХхА" - (обычный запрос, обычный юзер) - в итоге он не получит ответа.. т.к. у нас луккарандаш - такого тэга в таблице которую мы делали нет.. а в моей выборке через like '%'%'%' он ответ получит.
12 мар 14, 13:51    [15710189]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
int9
поиск с заданного начала не возможен (т.е. не могу применить like 'XXXA%', таблица содержит очень много одинаковых вступлений, и в результате база ответа не даст

fts то может.
Он то как раз делит строки на лексемы
12 мар 14, 13:54    [15710229]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
int9
Member

Откуда:
Сообщений: 36
Glory,

хорошо, тогда.. такой момент.. пользователь вводит например "Лампа PH80W" (хотя базе надо было бы "лампа ph 80w"

возьмем "карандашХхА" в тему истории..

так вот, чтобы не давать отказ такому юзеру.. у меня есть ещё табличка, в которой строки спрессованы, в ней мы и делаем like "%карандашХхА%", и находим ответ.. успешно.

сироп1ллуккарандашXxA110241280
сироп1лчесноккарандаш110241280
сироп1лвишнякарандаш110241280


а что делать при таком запросе и без like ? fts такой не найдет.. как я понял?
12 мар 14, 15:13    [15711010]     Ответить | Цитировать Сообщить модератору
 Re: like %xxx% в миллионной выборке, есть полный аналог like для fulltext index ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Такая задача решается административно. Особо продвинутый юзер ведет справочники, а остальные просто подставляют готовые значения из справочника.
12 мар 14, 17:06    [15712041]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить