加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL代码是否比C#代码快?

发布时间:2020-12-12 07:03:07 所属栏目:MsSql教程 来源:网络整理
导读:几个月前,我开始在这个编程公司工作。他们使用的一个实践是在SQL而不是C#中尽可能多的工作。 所以,让我说我有一个简单的例子来编写一些文件的列表: 是这样的: string SQL = @" SELECT f.FileID,f.FileName,f.FileExtension,'/files/' + CAST(u.UserGuid A
几个月前,我开始在这个编程公司工作。他们使用的一个实践是在SQL而不是C#中尽可能多的工作。

所以,让我说我有一个简单的例子来编写一些文件的列表:

是这样的:

string SQL = @"
    SELECT f.FileID,f.FileName,f.FileExtension,'/files/' + CAST(u.UserGuid AS VARCHAR(MAX)) + '/' + (f.FileName + f.FileExtension) AS FileSrc,FileSize=
           CASE
               WHEN f.FileSizeB < 1048576 THEN CAST(CAST((f.FileSizeB / 1024) AS DECIMAL(6,2)) AS VARCHAR(8)) + ' KB'
               ELSE CAST(CAST((f.FileSizeB / 1048576) AS DECIMAL(6,2)) AS VARCHAR(8)) + ' MB'
           END
      FROM Files f
INNER JOIN Users u
        ON f.UserID = u.UserID
";

// some loop for writing results {
//     write...
// }

更快或更好,这样的东西:

string SQL = @"
    SELECT u.UserGuid,f.FileID,f.FileSizeB
      FROM Files f
INNER JOIN Users u
        ON f.UserID = u.UserID";

// some loop for writing results {
       string FileSrc = "/Files/" + result["UserGuid"] + "/" + result["FileName"] + result["FileExtension"];
       string FileSize = ConvertToKbOrMb(result["FileSizeB"]);  
//     write...
// }

这个特定的代码并不重要(这只是一些基本的例子)…问题是关于这种事情一般来说,最好是在SQL或“正常”代码上加载更多的负载?

解决方法

这只是一个糟糕的编程习惯。您应该分离和隔离程序的不同部分,以便将来维护(想想下一个程序员!)

性能

许多解决方案的糟糕的DB性能,所以大多数开发人员通常会限制SQL数据库访问到最小的事务可能。理想地,将原始数据转换为人类可读的形式应该在可能的最后一点发生。此外,非格式化数据的内存使用量要小得多,而内存便宜,您不应该浪费它。要缓冲,缓存和传输的每个额外字节都占用时间,并减少可用的服务器资源

例如对于Web应用程序格式化,应由JSON数据包中的本地JavaScript模板完成。这减少了后端SQL数据库和应用程序服务器的工作量,并减少了需要通过网络传输的数据,所有这些都加速了服务器性能

格式化和本地化

许多解决方案对于相同的事务具有不同的输出需求,例如不同的视图,不同的地理位置等。通过将形成嵌入到SQL事务中,您将不得不为每个本地化创建一个新的事务,这将成为一个维护噩梦

还可以将格式化的事务用于API接口,您还需要另外一套API接口的事务,该接口将无格式化

使用c#,您应该使用经过良好测试的模板或字符串处理库,或至少string.Format(),不要使用”运算符与字符串,这是非常慢

分享负载

大多数解决方案都有一个DB的多个客户端,因此客户端格式化负载与多个客户端CPU共享,而不是单个SQL数据库CPU

我非常怀疑SQL比c#快,你应该执行一个简单的基准测试,并在这里发布结果:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读