2012-05-22 4 views
5

У меня есть маленький стол с 500 рядами. Эта таблица содержит 10 столбцов, включая один столбчик varchar (max).Медленный «Выбор» Запрос с varchar (макс.)

Когда я выполнить этот запрос:

SELECT TOP 36 * 
FROM MyTable 
WHERE (Column1 = Value1) 

Он извлекает около 36 строк в 3 минуты. В столбцах varchar (max) содержится в каждой строке 3000 символов.

При попытке извлечь только одну строку меньше:

SELECT TOP 35 * 
FROM MyTable 
WHERE (Column1 = Value1) 

Затем запрос извлекает 35 строк в 0 секунд.

В моей статистике клиентов, Б, полученный от сервера, у меня есть:

95 292 для запроса выборки данных в 0 сек

свыше 200 000 000 для запроса выборки данных в 3 мин

Знаете ли вы, откуда оно взялось?

EDIT --- Вот мой реальный код:

select top 36 * 
from Snapshots 
where ExamId = 212 

select top 35 * 
from Snapshots 
where ExamId = 212 

EDIT --- Более подробную информацию о статистике клиентов

Две статистики, имеющие огромное изменение являются:

Б, полученные от сервер: 66 038 Vs Более 2 000 000

TDS-пакеты, полученные от сервера 30 Vs 11000

+0

Нет, но я бы порекомендовал изменить поле 'varchar' в поле' text' и посмотреть, разрешает ли это решение isssue. – Emmanuel

+8

['text' has * long * устарел] (http://msdn.microsoft.com/en-us/library/ms187993.aspx) - почему вы его порекомендовали? –

+0

Возможно, это проблема с памятью или проблема с заменой диска? – Toc

ответ

0

Использовать Index для ExamId также использовать select field1,field2,etc вместо select * ....

+0

Пробовал. Не меняет ничего – Toc

0

Я не уверен, но попробуйте это:

выберите * из снимков, где ExamId = (выбрать топ 36 ExamId из снимков, где ExamId = 212)

+0

Я попытался (и заменил «=» на «in»), и он ничего не меняет – Toc

0

Как о попытке топ 50, затем вверху 75, затем вверху 100, чтобы увидеть, есть ли больше увеличения снова, потому что кажется, что это только эта одна строка или, может быть, только определенные строки в вашей таблице.

+0

Да, когда я увеличиваю верхнюю часть, это увеличивает время отклика, байты, полученные от сервера и пакеты TDS, полученные от сервер. – Toc

+0

с большой разницей, как происходит от 35 до 36? Или это просто конкретные строки в вашей таблице, которые совершают огромный скачок? –

+0

нет производительности почти то же самое между верхней 36 верхней 50. Я думаю, что это может быть проблема размера пакета или что-то вроде этого? – Toc

Смежные вопросы