【发布时间】:2012-04-03 05:57:00
【问题描述】:
我正在使用 C#、.NET 3.5 框架和 SQL Server 2008 R2 开发一个高频交易应用程序。我订阅了 70 种乐器,我为每种乐器存储了 1 分钟的柱状图。每个仪器的每个条形图由Open Price、High Price、Low Price、Close Price、Volume 组成。
我将每个仪器的所有一分钟柱推到一个公用表中,其中主键是StockID。
现在,进行一些计算。我将需要从 1 分钟酒吧构建 5 分钟酒吧、10 分钟酒吧、15 分钟酒吧等。示例:我将遍历最后 5 行 1 分钟柱形图,并构建第一个柱形图,柱形尺寸 = 5 分钟。在这 5 分钟内,我需要找到 Open Price、High Price、Low Price、Close Price、Volume。同样,我需要 180 个 5 分钟的酒吧。所以,我需要 180 * 5 = 900 行 1 分钟的条形图。 (从 900 开始,我将每 5 分钟构建 180 行)
如果我从 C# 代码中执行一个简单的 Select 语句以获取所有 900 个一分钟数据,然后在我的 C# 代码中循环并创建 180 个数据和 5 分钟柱,并在每 5 分钟柱中获取开盘价、最高价, 收盘价, 成交量。
-
或者,我编写一个 SQL 存储过程来执行上述相同操作,并将所有 180 条 5 分钟柱线数据的开盘价、最高价、最低价、收盘价、交易量返回到 C# 代码。
我的问题是,1) 或 2) 哪个更快,1) 或 2) 哪个更健壮
希望,我已经详细设计了我的问题和场景,供专家指导。
【问题讨论】:
-
根据我的经验,存储过程要快得多,因为它减少了服务器之间的查询次数
-
另一个“自己衡量”的问题。至少你在问可维护性。
-
这取决于许多变量——客户端速度、服务器速度、网络延迟、数据量、索引、s'proc 的质量。你需要自己测试一下。
标签: c# .net sql performance optimization