代码之家  ›  专栏  ›  技术社区  ›  devuxer

如何改进使用EntitySet属性的LinqToSQL查询的性能?

  •  2
  • devuxer  · 技术社区  · 14 年前

    我正在使用LinqToSQL查询一个小型、简单的SQL Server CE数据库。

    我注意到,任何涉及子地产的运营都是令人失望的缓慢。

    例如,如果我有 Customer 被引用的表 Order 表,LinqToSQL将自动创建 EntitySet<Order> 财产。这是一个很好的方便,允许我做像 Customer.Order.Where(o => o.ProductName = "Stopwatch") 但是,由于某种原因,当我尝试这样做时,SQL Server CE挂断的非常糟糕。我的一个查询,不是很复杂,需要3-4秒才能完成。

    如果我把这两张桌子分别拿出来,把它们转换成 List<Customer> List<Order> ,然后用我自己的查询手动联接,但这需要很多额外的代码。LinqToSQL生成这些 EntitySet<T> 属性自动——我想使用它们。

    那么,我怎样才能提高性能呢?例如,有没有 DataContext 有帮助的选择?

    注意:我的数据库在初始状态下只有25万,我不希望它增长到超过1-2兆字节。所以,这不像是有很多记录。


    更新

    以下是我在问题中使用的示例的表定义:

    create table Order
    (
        Id int identity(1, 1) primary key,
        ProductName ntext null,
        Quantity int null
    )
    
    create table Customer
    (
        Id int identity(1, 1) primary key,
        OrderId int null references Order (Id)
    )
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Jeff Schumacher    14 年前

    我以前没有使用过SQL Server CE和Linq to SQL,但是对于这么小的数据库,我的直觉告诉我性能问题更多的是与糟糕的查询优化有关,而不是磁盘访问。

    尝试从LINQ到SQL对象获取SQL查询,以查看可能发生的情况。也许可以对CE数据库手动运行这些查询,以查看它们是如何执行的。

    只添加正确的索引就很有可能解决这个问题。

    您也可以尝试LinqToSQL事件探查器。 http://l2sprof.com/