Запрос на присоединение к SQL Server выполняется медленно при использовании порядка - PullRequest
0 голосов
/ 14 февраля 2012

В нашей базе данных есть 2 таблицы.

  1. U_Accounts (маленькая таблица, содержащая строки)
  2. SMS_Buffer (большая таблица, содержащая очередь SMS)

Ниже приведен пример запроса

Select SMS_Buffer.msg_id, 
       SMS_Buffer.u_id, 
       SMS_Buffer.msgtxt, 
       SMS_Buffer.m_priority, 
       U_Accounts.U_Priority 
From SMS_Buffer
JOIN U_Accounts ON Sms_Buffer.u_id = U_Accounts.u_id 
where U_Accounts.u_msgpush=1 
Order by U_Accounts.u_priority DESC, 
         SMS_Buffer.m_priority DESC, 
         SMS_Buffer.m_id DESC

Вышеупомянутый запрос становится медленным, когда мы используем предложение ORDER BY с SMS_Buffer.m_priority DESC, SMS_Buffer.m_id DESC для записей, длина которых меньше 100000 строк в таблице SMS_Buffer, но когда он увеличивается, запрос становитсяочень медленно.

Просим вас предоставить нам решение для повышения производительности вышеупомянутого запроса.

Мы пытались создать кластеризованные, некластеризованные индексы, но безуспешно.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

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

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

0 голосов
/ 02 мая 2014

Когда я столкнулся с тем же самым, ответ Фрая из , этот вопрос помог. Короче говоря, статистика обновлений может быть решением. В SQL EXEC sp_updatestats .

Я имел дело с 2 подзапросами и таблицей, затем сортировал. 3 набора результатов были менее 5000 строк, и добавление Order By займет от 12 секунд до 5 минут. Это было смехотворно медленно. После обновления статистики он запустился за 1 секунду.

...