1

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

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

手动添加索引,右键单击索引 -> 添加索引,在 (Id, Duration) 上使查询稍微快一些,并且水合可以接受,不是完美无缺,但足够好。但是,如果我右键单击索引 -> 脚本索引为,并运行该创建的脚本,它不会提高查询的性能。

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

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

4

1 回答 1

0

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

于 2013-01-30T06:45:18.533 回答