SQL索引:手动添加时提高性能,但脚本没有

时间:2013-01-29 20:27:29

标签: sql sql-server nhibernate indexing

使用MSSQL和MSSQL Server Management Studio,我有一些相当复杂的查询,包含一些连接和几个SubQueries。

选择的一个属性是名为Duration的十进制(19,5)。当使用NHibernate的Queryover在SelectSubQuery中获取此列时,由于某种原因需要大约2分钟来水合我的对象,查询只需要几毫秒。

手动添加索引,右键单击索引 - >添加索引,(Id,持续时间)使查询稍快,水合可接受,不完美,但足够好。但是,如果我右键单击索引 - >脚本索引为,并运行该创建的脚本,它不会提高查询的性能。

Script Index As创建

CREATE NONCLUSTERED INDEX [idx_Duration] ON [Table] 
(
    [Id] ASC,
    [Duration] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF,
    IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, 
    ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO

所以我可以说,手动创建索引会提高性能,脚本索引也不会。

1 个答案:

答案 0 :(得分:0)

使用设计器创建索引或右键单击并编写对象脚本时,Management Studio中的相同代码用于生成SQL。 (两者都使用SMO - Sql Management Objects库)。您可以使用Profiler捕获SSMS生成的sql语句来验证它们是否完全相同。