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

Откуда: Minsk
Сообщений: 59
Решил посоветоваться по поводу быстродействия.
Есть таблица, в ней три поля типа vachchar, просто некие ФИО контактов.
Программисты написали приложение, где есть форма, кторая по части ФИО (фамилии, например, или 4-м буквам) ищет по всем этим полям следующим образом:
автор
(RM_NAME LIKE '%Reynold%'
OR CRM_Name LIKE '%Reynold%'
OR CUSTOMER_NAME LIKE '%Reynold%')

индексы по этим полям созданы!!!
и вот как ломанутся пользователей 100 искать в начале или конце отчетного периода нужных им людей для каких-то там целей, так сервер и выдаст 100% загрузку проца и памяти.

Вопрос.
Как вообще подходить к такому поиску так, чтобы время поиска было минимальным (как в Google, например)?
Хочу либо ресурсы нарастить, либо может рассмотреть вариант с полнотекстовым поиском по этим полям?

Вариант смены СУБД - не вариант.

Спасибо за любую мысль.
2 апр 12, 15:04    [12351753]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие при поиске.  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQL_USER
Программисты написали приложение, где есть форма, кторая по части ФИО (фамилии, например, или 4-м буквам) ищет по всем этим полям следующим образом:
автор
(RM_NAME LIKE '%Reynold%'
OR CRM_Name LIKE '%Reynold%'
OR CUSTOMER_NAME LIKE '%Reynold%')

индексы по этим полям созданы!!!

Индексы для таких запросов сервер использовать не может

MSSQL_USER
и вот как ломанутся пользователей 100 искать в начале или конце отчетного периода нужных им людей для каких-то там целей, так сервер и выдаст 100% загрузку проца и памяти.

Скорее диска. Ибо будет полное сканирование таблицы.
2 апр 12, 15:13    [12351791]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие при поиске.  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
MSSQL_USER,

можно разнести компоненты ФИО в отдельные поля, создать на них индексы и разрешить поиск не по произвольным буквам в середине этих полей, а только с привязкой к левой границе слова, что-то вроде RM_FirstName LIKE 'Reyn%', тогда индексы будут использоваться
но здесь не исключены некоторые сложности с разделением компонентов фио
2 апр 12, 15:20    [12351847]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие при поиске.  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Все правильно, индексы задействованы не будут если LIKE '%abc%', - упомянул, так как мозг постоянно на них уповает

Видимо, только вариант с полнотекстовым поиском имеет право на жизнь?
2 апр 12, 19:39    [12353628]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие при поиске.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
MSSQL_USER
Все правильно, индексы задействованы не будут если LIKE '%abc%', - упомянул, так как мозг постоянно на них уповает

Видимо, только вариант с полнотекстовым поиском имеет право на жизнь?
Традиционная ссылка
http://www.gotdotnet.ru/blogs/DeColores/1914/
2 апр 12, 20:13    [12353715]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие при поиске.  [new]
squid
Member

Откуда: LA
Сообщений: 590
Вам прямая дорога юзать Full Text Search.
3 апр 12, 15:45    [12358168]     Ответить | Цитировать Сообщить модератору
 Re: Быстродействие при поиске.  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
iap
Традиционная ссылка
http://www.gotdotnet.ru/blogs/DeColores/1914/


Да, я уже тоже нашел эту статейку.
Но мне кажется, что самая ценная информация находится в комментарии по поводу применения Sphinx.
Пойду порою в этом направлении, тем более, что новый Sphinx работает с MSSQL.
3 апр 12, 16:52    [12358989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить