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

前端之家收集整理的这篇文章主要介绍了SQL代码是否比C#代码快?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几个月前,我开始在这个编程公司工作。他们使用的一个实践是在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#快,你应该执行一个简单的基准测试,并在这里发布结果:-)

原文链接:https://www.f2er.com/mssql/84594.html

猜你在找的MsSQL相关文章