SQL Server 2008, как производительность - PullRequest
0 голосов
/ 21 июня 2010

Я заметил, что первый SQL-оператор с LIKE для большой таблицы выполняется очень медленно (около 20 минут), но каждый последующий очень-очень быстро (несколько секунд), даже если искомые строки полностью отличаются отначальный (первая строка 'способность%', вторая 'su_mit%')

Сохраняет ли сервер sql результаты сканирования таблицы для "оператора лайка" в кэше?Является ли возможный кэш доступным для всех клиентов?
Истекает ли срок действия "кэша"?
если полнотекстовый индекс доступен для того же столбца, где был применен и заполнен LIKE, влияет ли "кэш" на полный текстскорость?
Кто-нибудь знает документ, объясняющий проблему?
Приветствия
Грег

Ответы [ 2 ]

1 голос
/ 21 июня 2010

То, что вы испытываете, скорее всего, является результатом того, что часть (или вся) таблицы находится в буферном кеше (страницы данных, кэшированные в памяти) после первого сканирования. В зависимости от того, как часто вы обращаетесь к одной и той же таблице при сканировании, доступной памяти и других кэшируемых таблицах, SQL Server может сохранять страницы вашей таблицы в буферном кеше или поднимать ее в интересах кого-то другого.

Для запросов без подстановочных знаков (как в приведенных выше примерах) вы можете уменьшить его до сканирования индекса, если запрашиваемый столбец проиндексирован с нормальным индексом ...

Полнотекстовые индексы не используются оператором LIKE, если у вас есть полнотекстовый индекс в столбце, вероятно, будет хорошей идеей перейти от запроса LIKE к полнотекстовому запросу ... См. http://msdn.microsoft.com/en-us/library/ms142559.aspx

0 голосов
/ 21 июня 2010

SQL Server в основном работает как система виртуальной памяти, поэтому увеличение производительности, которое вы видите, это просто увеличение количества страниц в памяти, когда он выполняет второе сканирование таблицы.

Я не эксперт по SQL-серверу, так что, возможно, кто-то еще может добавить к этому дополнительную информацию, но когда вы используете LIKE, вы в основном лишаете базы данных возможности использовать любые индексы. Если вы хотите использовать полнотекстовый индекс, вам нужно использовать одну из конкретных команд запроса полнотекстового индекса FREETEXT, FREETEXTTABLE, CONTAINS и CONTAINSTABLE.

...