在SQL的性能ToUpper或SQL中的Upper函数方面哪个更好

时间:2011-08-03 08:54:18

标签: c# sql oracle

我有一种情况,我可以在代码隐藏中使用ToUpper(),或者我可以在存储过程中使用Upper of SQL。它让我思考使用哪个会更好?我认为这不会是一项重大的性能提升,但我想知道使用哪种更好,什么时候

3 个答案:

答案 0 :(得分:4)

我就是其中之一,数据库应该只做数据类型的人。就个人而言,我更喜欢C#中的ToUpper(),因为这是你的逻辑不属于数据库的地方。唯一的性能打击是必须解析sql中的toupper,但我很确定SPROC得到了优化,所以就我所知,甚至可能没有差别。

根据我的经验,不要让数据库比以前更难工作,做很多这些操作可能会显示数据库的性能命中率(对于大量的字符串,对于少量可能忽略不计)

答案 1 :(得分:1)

我不会去哪一个正确,因为这是主观的,取决于您的应用程序的架构和内部标准。

根据场景和数据,对数据库进行操作可能会对性能产生影响。

我们假设您有一个ORDER表,其中列STATUS_CODE只有大写值(从主表中引用,让我们说)。现在,如果你想让1 Apr 2011上的所有订单处于“已关闭”状态,并且此“已关闭”来自UI下拉列表,并且可以同时包含大小写(无论出于何种原因)。

这里在数据库或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)

可能会出现严重的性能问题,具体取决于表中的数据。 对于一个oracle将无法使用status_code列上的索引(如果有的话)。

答案 2 :(得分:-1)

1)如果您在C#中使用ToUpper,并且不想在SP中使用UPPER,那么当执行此SP时C#中的另一部分不使用ToUpper并且您可能会收到错误的结果时会出现这种情况 2)字符串操作非常繁重;如果您的服务器真的很忙,字符串操作将首先成为将它们从服务器移动到客户端的候选者。

相关问题