【问题标题】:Performance way of working on SQL Server data tables at C# code behind在 C# 代码后面处理 SQL Server 数据表的性能方式
【发布时间】:2012-12-08 18:08:14
【问题描述】:

好吧,现在你的问题可能很模糊,所以我会尽可能多地解释。

例如,我在名为tblNpc 的数据表中有 10 列和 5000 行。

所以我会在工作的时候对这张表做很多过滤。我在这里使用这种方法,但这是最好的处理方法吗?

这里是一个小例子

    string srQuery = "select * from tblNpc";
    DataSet dsNPC = DbConnection.db_Select_Query(srQuery);

    DataView dvNPC = new DataView(dsNPC.Tables[0]);

    dvNPC.RowFilter = "npcId=32";
    string srExampleData = dvNPC[0]["npcName"].ToString();

C# 4.0,SQL Server 2008 R2

重要提示:我将使用整个表,并且将过滤等于整个表的行数

【问题讨论】:

  • 使用select * from tblNpc where npcId = 32会快一点。然后只需将一行从数据库传输到客户端程序。
  • 好好想想,我将使用整个表格,并且将过滤等于整个表格的行数

标签: c#-4.0 sql-server-2008-r2 dataset dataview


【解决方案1】:

根据@Andormar's cmets,如果您首先设计用于完成这项工作的hand over the filtering job to the SQL Serverbring over only what you needed. 会更快

如果您需要在后面的代码中使用 DataTable,那么LINQ would be quicker I think。最重要的是,您可以使用 LINQ 而不是 RowFilter 对 DataTable 进行复杂查询。

例如,您的查询可以这样完成

var results = (from r in dsNPC.Tables[0].AsEnumerable()
               where r.Field<int>("npcId")) ==32
               select new { npcName = r.Field<string>("npcName")})
              .FirstOrDefault();

【讨论】:

  • +1。带有“tbl”的 Prefixixint 表(为什么?你不知道数据库与表一起工作?学习你的交易)同样糟糕,但总的来说 - 我总是不知道人们如何认为 DataSet(已知大、慢、坏)比一个用于此的 sql 服务器。
  • 非常感谢我正在寻找的答案。 @TomTom 查询服务器比查询内存中的对象慢得多。正如我所说,想象我正在过滤等于整个表中的行数。
  • @MonsterMMORPG 这闻起来像是服务器上的内存太少或索引错误等。
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 2019-11-23
  • 2012-04-04
  • 2013-07-10
  • 2010-12-02
  • 1970-01-01
相关资源
最近更新 更多