【发布时间】:2010-12-06 23:18:17
【问题描述】:
在过去使用数据库时,我发现有必要对查询进行低级调整,例如向优化器提供提示,使其应该使用特定的索引或连接顺序。我们目前正在考虑使用实体框架重写我们的数据层;是否使用 EF 会阻止这种低级优化?
在回答this question 时,有人建议重新处理 LINQ 查询是确保针对底层数据库的查询高效的最佳方式,但这肯定与实体框架的既定目标相反代码中的物理层关注点,应该只处理概念层。
一种选择是使用视图。另一种选择显然是调整实体类型的定义查询。但是,这两种方法都是按实体类型操作的,并且优化调整通常只需要应用于表的某些用途,而不是表的所有用途。我担心我最终不得不将伪实体引入概念层以利用这一点,这再次削弱了概念层和物理层的分离。
【问题讨论】:
-
为了记录,我们使用的是 MySQL 而不是 SQL Server。我无法评论后者的优化器,但在 MySQL 的情况下,它在很多地方选择了次优的执行计划。关于代码中的微优化的标准论点是编译器优化器已经变得如此聪明,以至于你无法击败它们。根据我的经验,SQL 优化器的类似情况似乎还有很长的路要走。
标签: database entity-framework optimization