MS Sql Query замедляется при добавлении еще одной строки в ключевое слово LIMIT - PullRequest
0 голосов
/ 11 февраля 2019

У меня странная проблема в моем запросе.Я не настолько опытен в написании SQL-запросов, но я и не новичок.Это заставляет меня думать и искать по крайней мере час.

Запрос, который я пробовал (SELECT TOP (19785)..) (цифры важны), выполняется примерно за 15 мс, но тот же самый запрос с увеличенным top всего на 1 выполняет 434Миз.Может кто-нибудь объяснить, почему это происходит?

Я прикрепил скриншот ниже, чтобы вы могли понять, о чем я говорю, если я не очень хорошо объяснил.

Image url - click here

РЕДАКТИРОВАТЬ: Кроме того, забыл упомянуть, что эта таблица действительно проста, у нее нет внешних ключей и нет другого сложного поля, кроме двух десятичных знаков (для хранения широты и долготы)

РЕДАКТИРОВАТЬ2: Прикрепленный запросплан выполнения ниже.https://www.brentozar.com/pastetheplan/?id=H1PLtgkSN

РЕДАКТИРОВАТЬ3: Извините за ошибку, это очевидно, но я заметил, что таблица на самом деле имеет внешний ключ для страны.Кроме того, я заметил, что если я удалил поля TOP (N) и uniqueidentifier (guid), а затем повторно выполнил оба запроса с

ORDER BY Id OFFSET M ROWS
FETCH NEXT N ROWS ONLY;

, это показывает аналогичное время выполнения (~ 15 мс)

Это показывает, что я должен делать запросы частями, что не является большой проблемой, учитывая, что у меня должно быть разбиение на страницы в приложении, над которым я работаю.

Спасибо за вашу помощь ихороший день.

1 Ответ

0 голосов
/ 11 февраля 2019

Это может быть следствием целевых целей строки (см .: https://sqlperformance.com/2018/02/sql-plan/setting-and-identifying-row-goals).). Именно здесь SQL Server использует значение TOP (n), принимая во внимание способ физического извлечения данных. Обычно SQL Server будетиспользуйте распределение данных, которые будут получены запросом, и индексы, доступные для определения шаблона поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...