如何提高检索复杂业务对象的性能?

时间:2014-02-22 13:14:09

标签: sql sql-server entity-framework nosql in-memory-database

目前我们有一个复杂的业务对象,我们的sql数据库需要大约30个连接来检索一个项目。 (这是我们的主要用例)。数据库在sql server中大约是2Gb。 我们使用实体框架来检索数据,并且需要大约3,5秒来检索一个项目。我们已经注意到,当在另一个表中有很多行时,在并行调用中使用子查询比使用连接更有效。 (所以我们有10个子查询之类的东西)。我们不使用存储过程,因为我们希望将数据访问层保留在“plain c#”中。

目标是在不改变环境的情况下在1秒内检索项目。 我们正在研究没有sql解决方案(RavenDB,Cassandra,带有“文档客户端”的Redis)和sql server的新功能“内存数据库”。

你推荐什么?您是否认为只有一个存储过程调用EF才能完成这项工作?

编辑1: 我们在连接的所有列上都有索引

1 个答案:

答案 0 :(得分:1)

在我看来,如果你需要30个连接来检索一个项目,那么数据库的设计就会出错。从关系的角度来看,这可能是正确的,但从功能/绩效的角度来看,这是完全不切实际的。

我想到了几个解决方案:

当然,使用这种情况下的存储过程要好得多,它会提高性能,但我不认为会发生戏剧性的变化。你应该尝试id和比较。同时修改所有索引。