C # использование результатов упорядочения SqlClient с ORDER BY очень медленно - PullRequest
0 голосов
/ 21 января 2011

Следуя странной ситуации, я получил вчера в c # при использовании SqlClient для получения отсортированного набора результатов.

В соответствии с SQL-запросом, например:

SELECT Num, Name FROM Customer WHERE Num LIKE '%V%' OR Name LIKE '%V%' ORDER BY Num ASC

Результирующий набор для заказа в этом особом случае имеет длину около 100 строк.

Проблема в следующем: если я запускаю запрос на самом sql-сервере, он чертовски быстр! Результат отображается практически в тот момент, когда я нажимаю «Запустить запрос». Но когда я запускаю запрос в C # с помощью SqlClient, он невероятно медленный (около 5-10 секунд). Я протестировал каждую маленькую часть моей программы и обнаружил, что соединение с sql-сервером происходит за 10 миллисекунд, поэтому проблема между двумя компьютерами не может быть проблемой.

Я пробовал почти все, пока не обнаружил, что запрос в C # с использованием SqlClient возвращает результаты почти так же быстро, как и выполнение запроса непосредственно на sql-сервере, если я удаляю из запроса ORDER BY Num ASC. *

Итак, мой вопрос: что, черт возьми, SqlClient в C # делает с ORDER BY, чтобы умножить используемое время на тысячи миллионов по сравнению с самим sql-сервером? =)

Ответы [ 3 ]

0 голосов
/ 21 января 2011

Посмотрите хорошее описание здесь на ту же тему: http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/aa4537ed-fb69-441d-82d3-0216f497f995

Этот запрос может помочь вам определить различия между SSMS и вашим приложением.

SELECT * FROM sys.dm_exec_connections;

Посмотрите @ это тоже http://forums.asp.net/t/917652.aspx

0 голосов
/ 21 января 2011

Извините за кражу вашего времени, я нашел проблему самостоятельно. Я использовал разные базы данных (быстрая и оптимизированная производственная база данных при тестировании запроса на самом sql-сервере и медленная неоптимизированная разработка db на c #). -.-

0 голосов
/ 21 января 2011

Попробуйте выполнить запрос два раза друг за другом, и посмотрите, есть ли разница во времени.Это определит, будет ли соединение или запрос требовать времени.

Когда вы измеряете, сколько времени занимает соединение, вы измеряете только часть того, что вы думаете.Фактический сеанс с базой данных не запускается, пока он вам не понадобится, то есть при запуске первого запроса.

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