Условия tsql vs C# условия выполнения

Я хотел бы знать, что выполняет быстрее и его предпочтительнее условие в запросе tsql, как это:

select case 'color' when 'red' then 1 when 'blue' then 2 else 3 end

или выполнить тот же переключатель в коде C# после получения значения из базы данных?

switch(color):
{
   case "red":
      return 1;
   case "blue":
      return 2;
   default:
      return 3;
}

Чтобы добавить больше данных в моем конкретном случае, у нас есть SQL-запрос, который возвращает 5800+ записей в некоторых случаях (фильтры даты и т. Д.), Затем мы объединяем эти результаты в C# (одна строка txt на запись) и генерируем txt.

У нас есть один сервер, который является сервером sql + webserver(asp.net), и его генерация занимает около 10 или более минут... Итак, мы думали о выполнении всех условий на стороне SQL, возможно объединяя поля в один на уровне SQL тоже против использования цикла C# с StringBuilder?

В настоящее время выполнение sql занимает 1 секунду, и все время, затрачиваемое на цикл конкатенирования, составляет 5873 записи с 11 полями в каждой.

3 ответа

Решение

Я думаю, что вы преждевременно оптимизируете. "Заставь это работать, сделай это правильно, а затем сделай это быстро".

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

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

Это на самом деле невозможно сказать, так как слишком много неизвестных факторов.

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

switch сам по себе будет быстрее, чем select, но это легко может быть перевешено тем фактом, что возвращение числа вместо строки из базы данных может быстрее обрабатываться в коде.

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

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

Если у вас есть 2 веб-сервера и 1 сервер sql, работа процессора будет разделена на веб-сервере. Если у вас тысячи полнофункциональных клиентов и 1 sql-сервер, работа процессора будет полностью распределена, выполняя это на клиентах.

Другие вопросы по тегам