SqlDataReader выполняет TSQL быстрее, чем управляющая студия, выполняющая TSQL - PullRequest
2 голосов
/ 06 июня 2009

Если я запускаю оператор TSQL в Management Studio и запускаю тот же запрос через SqlDataReader, последний дает результат быстрее, чем первый ...

Любая причина ??

Ответы [ 4 ]

4 голосов
/ 06 июня 2009

Одна возможность состоит в том, что состояние соединения отличается - в частности, параметры SET и т. Д. - не только очевидные (статистика, профилирование и т. Д.), Но даже такие вещи, как ANSI_NULLS, могут оказать большое влияние на некоторые запросы (особенно со столбцами xml или постоянными вычисляемыми столбцами).

Кроме того, что вы делаете с данными, когда читаете их? Вы показываете это? Хранить это? Просто бросить это? SSMS должен буферизовать его в табличном механизме для отображения в сетке ... если вы разбираете его в стандартные типизированные классы (которые уже соответствуют разметке таблицы) - или просто отбрасываете строку без обработки, тогда у вас меньше работы делать.

Насколько я помню, он также обновляет экран в пакетном режиме - предполагая, что происходит некоторая многопоточность ... здесь много переменных ...

1 голос
/ 06 июня 2009

Некоторые мысли:

Единственный способ точно узнать, это использовать SQL Profiler для перехвата длительности и т. Д. SSMS требуется ресурс для получения набора результатов и его отображения. Что вы делаете с результатами чтения данных SQL? Или

Или это все на вашем ПК, или вы запускаете SqlDataReader на сервере?

Или вы сначала выполняете запрос через SSMS, поэтому план кэшируется и компилируется с данными в памяти?

1 голос
/ 06 июня 2009

Это может быть связано со временем, которое требуется для отображения результатов в SSMS? Что, вероятно, будет связано с размером набора результатов.

Насколько велик набор результатов?

0 голосов
/ 07 июня 2009

В запросе Tsql, который я выполнял, нет операций на основе множеств ... Мне просто было любопытно проверить разницу во времени, выполнив запрос select на сервере, который выдал 163336 наборов записей с 15 столбцами всех типов данных. Я отметил время в строке состояния внизу ssms, где отображается время.

Я тоже выполнил тот же запрос с SqlDataReader. И я выполнял один и тот же запрос выбора несколько раз (учтите, что случаи и пробелы были одинаковыми) в обеих формах чтения запросов.

Время, затрачиваемое sqldatareader, варьировалось от 15 до 28 секунд, в то время как запрос на ssms варьировался от 29 до 31 секунды ...

Однако я не запускал их одновременно, но поочередно и многократно ... поэтому я не думаю, что пропускная способность сети, использование памяти или ЦП отрицает, что tsql, выполняемый с помощью datareader, дает лучшую производительность, чем тот, который выполняется в ssms

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