如何在客户端系统上获得最快的性能?

Say*_*yka -3 .net c# sql sql-server

我怎样才能获得最快的表现?我总是在客户端应用程序上使用计算而不是在程序中进行计 我有一张大约10,000行的表来评估.数据库位于托管Web服务器中,我一直在阅读所有行并在我的应用程序中的数据网格中显示.

因此,在阅读专栏'ProductPrice'和'ProductQty'的过程中,我可以计算ProductPrice*Qty并将其存储在应用程序中的另一列中,考虑到要流式传输的数据较少.

以下哪项会更快?

SqlCommand sqlCmdTxt = new SqlCommand(conn);
SqlDataReader sqlRead;

sqlCmdTxt.commandText = "Select ProductPrice, ProductQty, ProductPrice * ProductQty As Total From Stock";
sqlRead = sqlCmdTxt.ExecuteReader();
while (
sqlRead.Read()) {
    double price = sqlRead.GetDouble(0);
    double qty = sqlRead.GetDouble(1);
    double sum = price * qty;

    dataGridView.rows.add (new object[] {price, qty, sum});
}
Run Code Online (Sandbox Code Playgroud)

要么

SqlCommand sqlCmdTxt = new SqlCommand(conn);
DataSet dSet = new DataSet();
new SqlDataAdapter(new SqlCommand("Select ProductPrice, ProductQty, ProductPrice * ProductQty As Total From Stock"
    , conn)).Fill(dSet, "StockList");
dataGridView.DataSource = dSet.Tables["StockList"].DefaultView;
Run Code Online (Sandbox Code Playgroud)

Bra*_*vic 6

计算本身可能无关紧要(无论是在服务器还是客户端上完成).更重要的是物理数据检索(查询执行计划,缓存,群集,分区等)以及从服务器到客户端的数据传输.

在这种特殊情况下,您在两种情况下都使用相同的查询,因此我希望在客户端进行计算只会将(很少)时间添加到查询本身所需的时间(无论如何).

但是,如果你有...

Select ProductPrice, ProductQty From Stock
Run Code Online (Sandbox Code Playgroud)

...与...

Select ProductPrice * ProductQty As Total From Stock
Run Code Online (Sandbox Code Playgroud)

...我希望第二个稍快一些:从服务器转移到客户端,一堆较大的2字段元组(对于第一个查询)可能比传输相同数量的较小的1-元组花费更多的时间字段元组(用于第二个查询).除此之外,它会占用更多的可用网络带宽,影响其他并发客户端.

而如果你需要过滤1个以任何方式数据,使用服务器端WHERE很可能是高于所有行获取到客户端只是放弃大部分的行有更快.如果您对数据库性能主题感兴趣,我热烈建议您查看:使用索引,卢克!

建议:

  • 您的"默认"位置应尽可能在服务器上执行.
  • 如果有疑问,请不要猜测,而是测量代表性的数据量(在数据库术语中,50000行几乎不符合"大").

1或聚合(SUM,AVG,MAX...),或JOIN等...