Что лучше с точки зрения производительности ToUpper из C # или функции Upper в SQL - PullRequest
2 голосов
/ 03 августа 2011

У меня есть ситуация, когда я могу использовать ToUpper () в codebehind или использовать Upper SQL в хранимых процедурах.Это заставило меня задуматься о том, что будет лучше?Я не думаю, что это будет серьезным улучшением производительности, но я хотел бы знать, с помощью которого было бы лучше и когда

Ответы [ 3 ]

4 голосов
/ 03 августа 2011

Я один из тех, кто использует только базу данных.Лично я предпочел бы ToUpper () в C #, потому что именно здесь ваша логика принадлежит не в базе данных.Единственным ударом по производительности будет необходимость разбора toupper в sql, но я уверен, что SPROC оптимизирован, поэтому, насколько я могу судить, даже не будет разницы.

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

1 голос
/ 03 августа 2011

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

Работа с базой данных может повлиять на производительность в зависимости от сценария и данных.

Допустим, у вас есть таблица ORDER со столбцом STATUS_CODE, в которой будут только значения в верхнем регистре (скажем, из основной таблицы). Теперь, если вы хотите получить все ордера, размещенные на 1 Apr 2011, которые находятся в состоянии «ЗАКРЫТО», и это «ЗАКРЫТО» происходит из выпадающего списка пользовательского интерфейса и может иметь как верхний, так и нижний регистр (по любой причине).

Здесь выполнение upper для базы данных или в C # не должно иметь большого значения.

select *
from order
where order_date  = '1 Apr 2011'
and status_code = upper(:status_code)

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

select *
from order
where order_date  = '1 Apr 2011'
and upper(status_code) = upper(:status_code)

, которая может иметь серьезные проблемы с производительностью в зависимости от данных в таблице. Для одного оракула не удастся использовать индекс по столбцу status_code (если он есть).

0 голосов
/ 03 августа 2011

1) если вы используете ToUpper в C # и не хотите использовать UPPER в SP, у вас может возникнуть ситуация, когда другая часть в C # не использует ToUpper при выполнении этого SP, и вы можете получить неправильные результаты 2) операции со строками очень тяжелые; если ваш сервер будет действительно занят, строковые операции будут первыми кандидатами для их перемещения с сервера на клиент.

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