首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >来自SQL Server Management Studio的令人困惑的性能建议

来自SQL Server Management Studio的令人困惑的性能建议
EN

Stack Overflow用户
提问于 2019-04-23 22:21:59
回答 1查看 81关注 0票数 1

我正在努力提高我们的SQL性能。SQL Server Management Studio给出了一个令我惊讶的建议。出于示例的目的,我将简化表结构和SSMS提供的建议。

Person表结构

  • id
  • first_name
  • last_name
  • date_of_birth
  • email

我有一个特定的查询,我显示了它的执行计划。然后,我看到了SSMS给出的建议,这让我有点惊讶。建议添加两个签名如下的索引,分别提升41%和53%的性能:

CREATE NONCLUSTERED INDEX [person_1]
  ON [Person]([first_name],[last_name])
  INCLUDE ([id],[date_of_birth],[email])

CREATE NONCLUSTERED INDEX [person_2]
  ON [Person]([first_name],[last_name])
  INCLUDE ([id],[email])

这两个索引位于相同的列上。只有包含列是不同的。根据我对索引的理解,第一个索引也包括第二个索引的数据。那么,为什么SSMS推荐第二个索引,而第一个索引已经包含了所需的数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-24 03:30:15

永远不要使用SSMS建议作为应得的。这个建议是基于一个特定的查询。

而是探索像sys.dm_db_missing_index_details这样的系统视图。在sys.dm_db_missing_index_details上查看更多信息

或者在SQL Server Diagnostic Information Queries for April 2019上查看Glenn Berry的车管所查询

…或者更好的选择Brent Ozar sp_blitzindex BrentOzarULTD/SQL-Server-First-Responder-Kit

…或者使用这个查询

SELECT DB_NAME(database_id) AS database_name, 
       OBJECT_NAME(object_id, database_id) AS table_name, 
       mid.equality_columns, 
       mid.inequality_columns, 
       mid.included_columns, 
       (migs.user_seeks + migs.user_scans) * migs.avg_user_impact AS Impact, 
       migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) AS Score, 
       migs.user_seeks, 
       migs.user_scans
FROM sys.dm_db_missing_index_details mid
     INNER JOIN sys.dm_db_missing_index_groups mig ON mid.index_handle = mig.index_handle
     INNER JOIN sys.dm_db_missing_index_group_stats migs ON mig.index_group_handle = migs.group_handle
ORDER BY migs.avg_total_user_cost * (migs.avg_user_impact / 100.0) * (migs.user_seeks + migs.user_scans) DESC;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55813390

复制
相关文章

相似问题

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