【发布时间】:2014-02-23 21:33:16
【问题描述】:
几个月前,我开始在这家编程公司工作。他们使用的一种做法是在 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.FileName,
f.FileExtension,
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 或 SQL 上施加更多负载会更好吗? “正常”代码?
【问题讨论】:
-
这将取决于很多事情:您的数据库结构、您正在执行的操作、您的机器与数据库服务器相比的性能等等。一般 你最好让数据库做数据库擅长的事情。
-
一般来说,不能说苹果是否比橘子快。
-
除了 John Saunders 的评论和 Jim Mischel 的评论,查看 Indexes(运行 Profiler 以微调 T-SQL 代码)。您可以在 Db 端做一些事情来确保传输数据的速度更快。
标签: c# sql sql-server