我想知道在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 server + webserver(asp.net),生成它需要10分钟或更长时间......所以我们考虑在sql端做所有条件,也许连接字段作为一个在sql级别与使用c#循环与StringBuilder?
现在,sql需要1秒才能执行,并且它总是在连接循环中占用,有5873条记录,每条记录有11个字段
答案 0 :(得分:1)
我认为你过早地进行了优化。 “让它工作,做对,然后快速。”
我知道这个陈述(以及其他类似的陈述)带来了很多争论,但我认为你应该将这个逻辑放在最合适的层中,例如,它具有最少的重复,最重要的是可用性,最易于维护等。如果此时遇到性能问题,您可以使用自己的负载在您的环境中进行实际测量。
作为一个例子,而不是像这样的一些裸开关(必须保持),也许这应该在DB中的查找表中并带回一个连接,或者它可能更好地作为某个类的属性公开基于枚举。这些可能是更好的模式。
答案 1 :(得分:0)
处理器上的所有条件都相同,您的性能可能更多地取决于工作负载和带宽。
您是通过用整数替换字符串还是仅添加整数列来节省任何带宽?是否会对行进行任何过滤,从而导致数据流量显着减少?
如果您有2个Web服务器和1个sql server,则处理器工作将通过在Web服务器上进行分割。如果您有数千个富客户端和1个SQL Server,那么处理器的工作将通过在客户端上进行完全分发。
答案 2 :(得分:0)
这是不可能的,因为有太多未知因素。
例如,它取决于您从数据库返回多少数据,如何处理返回的数据,以及数据库服务器或应用程序服务器是否处于容量状态。
switch
本身会比select
更快,但是这可能很容易被从数据库中返回一个数字而不是一个字符串在代码中处理得更快的事实所抵消