1

我想知道在这样的 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 级别也与使用带有 StringBuilder 的 c# 循环?

现在 sql 需要 1 秒来执行,并且在连接循环中所花费的所有时间,有 5873 条记录,每条记录有 11 个字段

4

3 回答 3

1

我认为您过早地进行了优化。“让它发挥作用,让它正确,然后让它快速。”

我知道这个声明(以及其他类似的声明)会引起很多争论,但我认为你应该把这个逻辑放在最合适的层中,比如重复最少、可重用性最高、最简单的层维护等。如果您此时遇到性能问题,您可以在您的环境中使用自己的负载进行实际测量。

作为一个例子,而不是像这样的一些裸开关(必须维护),也许这应该在数据库中的查找表中并通过连接带回来,或者它可能更好地暴露为基于某个类的属性枚举。这些可能是更好的模式。

于 2012-04-10T15:16:57.960 回答
0

在处理器上所有条件相同的情况下,您的性​​能可能将更多地取决于工作负载和带宽。

您会通过用整数替换字符串还是简单地添加整数列来节省带宽?是否会对行进行任何过滤,从而导致通过网络传输的数据显着减少?

如果您有 2 台 Web 服务器和 1 台 sql 服务器,处理器工作将通过在 Web 服务器上进行分配。如果您有数千个富客户端和 1 个 sql server,则处理器工作将完全分布在客户端上。

于 2012-04-10T15:13:18.320 回答
0

这真的不能说,因为有太多未知的因素。

例如,这取决于您从数据库返回多少数据、如何处理返回的数据以及数据库服务器或应用程序服务器是否满负荷。

switch本身会比 快,但是这select很容易被从数据库中返回数字而不是字符串在代码中处理速度更快的事实所抵消。

于 2012-04-10T15:15:17.757 回答