none
关于EF调用存储过程与ADO.NET的性能疑问 RRS feed

  • 问题

  • 大家好,这段时间一直对EF和ADO.NET的性能有疑问纠结。现在在开发一个项目,数据库是ORACLE,主表数据量10万条左右,用户群有300,想用EF,但对EF性能方面有疑问,在EF和AOD.NET的纠结中。

    我觉得EF能用IEnumerable和IQueryable,或者用Include都可以。对于复杂的查询性能能直接写SQL语句或者用存储过程,应该不会太慢吧。

    望诸君对此给点建议,谢谢。


    2015年11月5日 8:46

答案

  • 首先10W 的数据量根本不算多,EF 应该是可以轻松应对。但主要还是要看你的数据库的表是如何设计的,以下仅为几点建议,希望能对你有用:

    1. 数据最较大(千万+)分表/组建动态表,然后使用拼接 SQL 的方式查询。
    2. 使用 EF 与基数表映射,即用户基本信息,业务逻辑相关的基本信息表;DAL 中建立一个使用 Ado.net 的 Repository 类,用来与详细数据表 CRUD。
    3. 若详细数据表数据量较大且根据实际业务情况将会有更大、更快增长则应该考虑对详细数据表进行拆分,横向或是纵向,因为表中数据最很大时插入一条数据都很慢。
    4. 若有非常复杂的查询需求时(无论是使用 EF 还是 ADO.Net),则应该考虑创建存储过程,让数据库做它本该做的工作。
    5. 优化 SQL 查询(无论是使用 EF 的 Linq To Entity 还是 ADO.NET 拼接 SQL),分页、索引\组合索引、Where中应该使用索引列做为条件 ....
    6. 若条件允许则应该平衡数据库服务器压力,比如增加新的数据库服务器以达到负载转移。
    7. 让 DBA 参与数据库设计及优化,毕竟码农不可能是全才。

    EF 只是一个 ORM 框架,至于性能好坏是和代码与设计有很大关系的。


    Please mark this as answer if it helps with this issue!


    2015年11月6日 5:09