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)
计算本身可能无关紧要(无论是在服务器还是客户端上完成).更重要的是物理数据检索(查询执行计划,缓存,群集,分区等)以及从服务器到客户端的数据传输.
在这种特殊情况下,您在两种情况下都使用相同的查询,因此我希望在客户端进行计算只会将(很少)时间添加到查询本身所需的时间(无论如何).
但是,如果你有...
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很可能是远高于所有行获取到客户端只是放弃大部分的行有更快.如果您对数据库性能主题感兴趣,我热烈建议您查看:使用索引,卢克!
建议:
1或聚合(SUM,AVG,MAX...),或JOIN等...