ORM和数据库索引

时间:2009-05-07 22:36:37

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

在使用ORM(如NHibernate / Hibernate)时,您有什么方法可以创建和维护数据库索引。

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

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

我的环境是NHibernate + SQL Server 2005。

2 个答案:

答案 0 :(得分:1)

我发现需要建立索引的列通常是“显而易见的”。我的意思是,如果你创建像“从p p中选择p,其中p.surname =:surname”这样的查询,那么姓氏所指的任何列都需要一个索引。

同样,每个外键都应编入索引。

不,我不等到表演真的出问题。索引就是我从一开始就做的事情。

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

答案 1 :(得分:0)

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

您也可以在sql management studio中使用数据库引擎优化顾问,不过该工具是否实际上比花一些时间考虑数据库设计和查询模式更有用,这一点值得商榷。