【问题标题】:ORM and database indexesORM 和数据库索引
【发布时间】:2010-10-24 15:47:25
【问题描述】:

在使用诸如 NHibernate/Hibernate 之类的 ORM 时,您有什么方法来创建和维护数据库索引。

由于 ORM 正在生成查询,您是否可以推荐任何工具来分析查询计划并建议应该创建的索引类型?

我目前的方法是……等到某些东西运行缓慢,然后找到慢查询并优化它……但这有点蹩脚,不是吗?我的目标不是最终​​得到数十或数百个索引,其中没有人知道系统实际使用了哪些索引,哪些没有。所以再次索引维护。

我的环境是 NHibernate + SQL Server 2005。

【问题讨论】:

    标签: sql-server sql-server-2005 nhibernate hibernate orm


    【解决方案1】:

    我发现需要索引的列通常是“显而易见的”。我的意思是,如果您创建诸如“select p from Person p where p.surname = :surname”之类的查询,那么 surname 所指的任何列都需要一个索引。

    同样,每个外键都应该被索引。

    不,我不会等到性能实际上是一个问题。索引只是我从一开始就做的事情。

    哦,我想补充的另一件事是,大多数(如果不是全部)ORM 都能够打开语句日志记录。这些通常不是特别可读(单行,表名 t0、t1、t2 等),但这可以告诉您运行了哪些查询以及运行频率。

    【讨论】:

    • 我们有很多查询,为每个“明显”字段创建索引是没有意义的,因为我不想最终在数据库。我想要的是索引实际上很慢的东西,或者使用可以为多个查询服务的组合索引,而不是单独优化每个查询。一切都是因为每个查询在执行期间每个数据库只能使用一个索引。
    • 应该是每个表一个索引,抱歉。
    【解决方案2】:

    无论您是否使用 ORM,用于分析慢速查询/不良索引的标准工具都适用。您可以使用 sql server profiler 检查针对您的数据库运行的 sql 语句,然后使用 sql server management studio / sql query analyzer 查询窗口中的索引计划功能来查看查询计划的详细信息并了解您可能需要添加哪些索引。

    您还可以在 sql management studio 中使用数据库引擎优化顾问,尽管该工具是否真的比简单地花一些时间考虑您的数据库设计和查询模式更有用还有待商榷。

    【讨论】:

      猜你喜欢
      • 2011-03-23
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      相关资源
      最近更新 更多