Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: оптимизация  [new]
правильный проходящий.
Guest
J.d
при отсутсвии указания order by mssql сортирует по PK
При отсутствии указания order by mssql НЕ сортирует. Никак. Некая "отсортированность" есть всего лишь побочный эффект от выбора непараллельного сканирования по "удачному" индексу.
25 апр 17, 11:51    [20432125]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
J.d
у меня поле - это название организации. и моя задача вывести для веб приложения самые свежие 50 по указананной подстроке
Наводит на мысль, что справочника организаций у вас нет.
Заведите себе такой справочник и ищите по нему. Поддерживать такой справочник можно автоматически триггером.
25 апр 17, 12:01    [20432162]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
rnk
Member

Откуда:
Сообщений: 126
invm
J.d
where name like '%' + @query_string + '%'
При таком предикате эффективных индексов не бывает.
Он у вас просто сканируется целиком вместо самой таблицы.

Пробуйте другие механизмы. Например FTS.


Если часто встречаются запросы по концу слова:
where name like '%' + @query_string

Например: %навт, чтобы найти космонавт, астронавт, аргонавт, то можно добавить «перевёрнутое» вычисляемое поле:
ALTER TABLE myTable ADD name_rev AS REVERSE(c_name) PERSISTED

повесить на него индекс и искать
where name_rev like REVERSE(@query_string) + '%'
25 апр 17, 12:18    [20432236]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
правильный проходящий.,

ну я собираюсь сделать так чтоб эффект был мне на руку.
будет один индекс по pk/ так как pk это и есть таблица, а при поиске используется clustered index scan то результат будет то что мне надо.


invm

это и есть справочник организаций. просто мы его постоянно дополняем на основе выписок егрюл.
25 апр 17, 12:30    [20432285]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
aleksrov
Member

Откуда:
Сообщений: 948
J.d,

Вам говорят что если order by не указан порядок не гарантирован, если он вам важен, его необходимо указать. Помимо того что написали выше может быть еще (при определенных условиях) merry-go-round и allocation order scan.
25 апр 17, 12:35    [20432307]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
aleksrov,

а что мне делать? выхода пока не вижу. система проседает.
25 апр 17, 12:46    [20432362]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
J.d,

автор
ну я собираюсь сделать так чтоб эффект был мне на руку.
будет один индекс по pk/ так как pk это и есть таблица, а при поиске используется clustered index scan то результат будет то что мне надо.

всё бредовее и бредовее...
25 апр 17, 12:50    [20432377]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
да уж)
25 апр 17, 12:51    [20432378]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
J.d
select top 100 ... 
from table 
where name like '%' + @query_string + '%'
order by dt desc
Какие столбцы скрываются за многоточием?
25 апр 17, 13:05    [20432431]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
J.d
aleksrov,

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

Вот что точно не поможет - изменение этого запроса и изменение этой таблицы.
Поиск like '%' + @query_string + '%' будет всегда медленный, без серьёзных изменений не обойтись.
25 апр 17, 13:18    [20432490]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
invm,

реквизиты компании. ( огрн, адрес, кпп и т.д. )
но я могу и просто ID (pk) оттуда вытащить. а потом сделать доп запрос по первичному ключу
25 апр 17, 13:25    [20432526]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
aleksrov
Member

Откуда:
Сообщений: 948
J.d
invm,

реквизиты компании. ( огрн, адрес, кпп и т.д. )
но я могу и просто ID (pk) оттуда вытащить. а потом сделать доп запрос по первичному ключу


???
25 апр 17, 13:27    [20432541]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
aleksrov,

что вызвало у вас вопрос?
25 апр 17, 13:28    [20432546]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
rnk
Member

Откуда:
Сообщений: 126
J.d,

А поле name - абсолютно произвольно или имеет какую-то структуру, за которую можно уцепиться?
25 апр 17, 13:29    [20432551]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
alexeyvg,

у меня нет готового решения на этот случай, поэтому обратился сюда может ктото поделится опытом. нагородить всегда успею) но это время на исследования.
25 апр 17, 13:29    [20432556]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
rnk,

ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "МОНОЛИТ"

и т.д.
25 апр 17, 13:30    [20432558]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
МуМу
Member

Откуда:
Сообщений: 1120
То Автор. А почему бы справочник организаций не искать по ИНН например?
25 апр 17, 13:30    [20432559]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
МуМу,

потому что веб интерфейс представляет собой поисковую строку где человеку предлагается найти компанию по части названия - типа удобно - вбил "автотранс" - и вот тебе последние 100 компаний зарегистрированныз в егрюл содержащих в названии "автотранс". вместо того чтобы вбивать инн, лезть за документами ( никто ж не помнит его наизусть ) - типа юзер френдли интерфейс.
25 апр 17, 13:32    [20432569]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
МуМу
Member

Откуда:
Сообщений: 1120
Ааа, ну с этого и стоило начинать. Для начала посмотрите полнотекстовый поиск. Какова кстати размерность у вас поля по которому осуществляется like?
25 апр 17, 13:37    [20432594]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
МуМу,

2000. по факту 877.
25 апр 17, 13:39    [20432600]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
J.d
МуМу,

потому что веб интерфейс представляет собой поисковую строку где человеку предлагается найти компанию по части названия - типа удобно - вбил "автотранс" - и вот тебе последние 100 компаний зарегистрированныз в егрюл содержащих в названии "автотранс". вместо того чтобы вбивать инн, лезть за документами ( никто ж не помнит его наизусть ) - типа юзер френдли интерфейс.
Да, FTS как раз идеально подходит для юзер френдли поиска.
Просто делаете индекс, и меняете запрос WHERE
25 апр 17, 13:39    [20432602]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
J.d,

тут ктото сказал что полнотекстовый не подойдет так как ищет слова целиком.
25 апр 17, 13:39    [20432603]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
alexeyvg,

а это подходит для случая когда вбили в поиске - "автотранс" а в результатах ожидают увидеть "общество с ограниченной ответственностью мосавтотранс"

?
25 апр 17, 13:41    [20432612]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
J.d
Member

Откуда: Москва
Сообщений: 691
если да, я просто пошел изучать FTS и всем спасибо за ваше время))
25 апр 17, 13:41    [20432616]     Ответить | Цитировать Сообщить модератору
 Re: оптимизация  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
J.d
реквизиты компании. ( огрн, адрес, кпп и т.д. )
При таком раскладе ваш поисковый индекс вовсе не используется и сканируется целиком кластерный.
Вылечить без переписывания запроса можно переделав индекс на ( dt desc, name ) include (огрн, адрес, кпп и т.д.)
Либо сделав кластерный ( dt desc, name )
Но проще переписать запрос:
select ... 
from
 (select top (100) PK from table where name like '%' + @query_string + '%' order by dt desc) a join
 table b on b.PK = a.PK;
25 апр 17, 13:44    [20432633]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить