首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在SQL Server中优化ShowPlan XML

是否可以在SQL Server中优化ShowPlan XML
EN

Stack Overflow用户
提问于 2012-04-30 17:13:17
回答 1查看 130关注 0票数 0

我有一个相当复杂的查询,一旦SQL server建立了查询计划(令人满意),它只需不到一秒钟的时间就可以运行。但是,根据分析器,查询第一次运行事件ShowPlanXML大约需要14秒(不能令人满意)。

有没有办法优化ShowPlanXML,让它在第一次运行时更快地完成?

或者我要创建一个计划指南?

这里的信息是SQL查询(由NHibernate生成):

代码语言:javascript
复制
SELECT top 20 this_.UserId as UserId55_0_, this_.User_Version as User2_55_0_, this_.User_ApplicationId as User3_55_0_, this_.User_DeletedOn as User4_55_0_, this_.User_CreatedOn as User5_55_0_, this_.User_ModifiedOn as User6_55_0_, this_.User_CreatedById as User7_55_0_, this_.User_CreatedByName as User8_55_0_, this_.User_ModifiedById as User9_55_0_, this_.User_ModifiedByName as User10_55_0_, this_.User_Name as User11_55_0_, this_.User_ExternalId as User12_55_0_, this_.User_DynamicFields as User13_55_0_, 
this_.User_FirstName as User14_55_0_, this_.User_LastName as User15_55_0_, this_.User_Prefix as User16_55_0_, this_.User_Gender as User17_55_0_, this_.User_Language as 
User18_55_0_, this_.User_Code as User19_55_0_, this_.User_Nationality as User20_55_0_, this_.User_FirstLanguage as User21_55_0_, this_.User_DrivingLicence as User22_55_0_, 
this_.User_Category as User23_55_0_, this_.User_UserStatus as User24_55_0_, this_.User_UserType as User25_55_0_, this_.User_WorkPhone as User26_55_0_, this_.User_MobilePhone as 
User27_55_0_, this_.User_Fax as User28_55_0_, this_.User_Mail as User29_55_0_, this_.User_Login as User30_55_0_, this_.User_Password as User31_55_0_, this_.User_BornOn as 
User32_55_0_, this_.User_StartedOn as User33_55_0_, this_.User_FinishedOn as User34_55_0_, this_.User_Address as User35_55_0_, this_.User_PostalCode as User36_55_0_, 
this_.User_City as User37_55_0_, this_.User_Country as User38_55_0_, this_.User_PositionTitle as User39_55_0_, this_.User_Comments as User40_55_0_, this_.User_OptionalField1 as 
User41_55_0_, this_.User_OptionalField2 as User42_55_0_, this_.User_OptionalField3 as User43_55_0_, this_.User_PasswordConsecutiveFailedAttempts as User44_55_0_, 
this_.User_PasswordModificationDate as User45_55_0_, this_.User_WrongPasswordAttemptDate as User46_55_0_, this_.User_PictureUrl as User47_55_0_, this_.User_PasswordModificationStatus as User48_55_0_, this_.User_SecretQuestionConsecutiveFailedAttempts as User49_55_0_, this_.User_PlatformMailTransfer as User50_55_0_, this_.User_TimeZoneId as User51_55_0_, this_.User_ConnectionState as User52_55_0_, this_.User_LastConnectionId as User53_55_0_, this_.User_TotalPercentRealized as User54_55_0_
FROM Dir_User this_ 
WHERE this_.UserId in (
      SELECT distinct this_0_.UserId as y0_ 
      FROM Dir_User this_0_ inner join Dir_UserDynamicGroup dynamicgro3_ on this_0_.UserId=dynamicgro3_.UsDy_UserId 
      inner join Dir_Group dynamicgro1_ on dynamicgro3_.UsDy_DynamicGroupId=dynamicgro1_.GroupId 
      WHERE dynamicgro1_.GroupId = (51904517) 
      and this_0_.User_ApplicationId = 65536 
      and this_0_.User_DeletedOn is null 
      and this_0_.UserId in (
            SELECT distinct this_0_0_.TargetUserId as y0_ 
            FROM Dir_UserGroupMember this_0_0_ 
            WHERE this_0_0_.OwnerUserId = 7341195 
            and ( (this_0_0_.Scope & 139280) != 0  or ( (this_0_0_.Scope & 139280) != 0  
            and this_0_0_.GroupId = this_0_0_.SubGroupId)))) 
            ORDER BY this_.User_Name asc
EN

回答 1

Stack Overflow用户

发布于 2013-06-04 23:06:40

show-plan事件可能会对SQL Server的性能产生重大影响(请参见sqlserver.query_post_execution_showplan Performance Impact)。如果您希望获得编译存储过程所用时间的准确表示,则应使用另一种方法。

您应该能够通过直接查看计划缓存来确定计划编译所用的时间,请参见Identifying High Compile Time Statements from the Plan Cache

不幸的是,除了简单地降低查询的复杂性之外,我不知道有多少方法可以减少SQL Server查询的编译时间。尝试通过计划缓存降低计划编译所需的频率是提高性能的标准方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10381131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档