使用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
所以我可以说,手动创建索引会提高性能,脚本索引也不会。
答案 0 :(得分:0)
使用设计器创建索引或右键单击并编写对象脚本时,Management Studio中的相同代码用于生成SQL。 (两者都使用SMO - Sql Management Objects库)。您可以使用Profiler捕获SSMS生成的sql语句来验证它们是否完全相同。