sql-server - 估计的执行计划显示所需的索引?

标签 sql-server

好的,

我不知道我是不是疯了,但估计的执行计划不是用来告诉你需要哪些索引来提高你的性能吗?我以前的工作习惯于这样做,但现在看来我必须使用调整顾问。我不介意调整顾问,但我以前做的方式非常简单!

谢谢

最佳答案

在 SSMS 2008 和 SSMS 2012 中都可以看到这对估计计划和实际计划都运行良好。

这里有一个简单的例子来说明估计的和实际的执行计划都将显示缺失的索引:

USE tempdb;
GO

CREATE TABLE dbo.smorg(blamp INT);
GO

INSERT dbo.smorg(blamp) SELECT n FROM
(
  SELECT ROW_NUMBER() OVER (ORDER BY c1.object_id)
  FROM sys.all_objects AS c1, sys.all_objects AS c2

) AS x(n);
GO

现在突出显示它并选择估计的执行计划,或打开实际执行计划并点击执行:

SELECT blamp FROM dbo.smorg WHERE blamp BETWEEN 100 AND 105;

您应该会看到缺少的索引建议。你会在这里看到它:

SELECT * 
    FROM sys.dm_db_missing_index_details 
    WHERE [object_id] = OBJECT_ID('dbo.smorg');

您可以在此处阅读有关 DMV 的更多信息:

http://msdn.microsoft.com/en-us/library/ms345434.aspx

您还应该调查 SQL Sentry Plan Explorer (免责声明:我为 SQL Sentry 工作)。这是一个免费工具,可以显示估计计划的缺失索引(如果它们在 SQL Server 提供的 XML 中),没有像 SSMS 这样的错误(它在多个批处理中重复相同的建议,即使批处理没有提到相同的表),并生成实际的执行计划,没有通过网络将所有结果拉到客户端 - 它只是丢弃它们(因此网络和数据开销不会影响计划分析).

关于sql-server - 估计的执行计划显示所需的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10742849/

相关文章:

sql-server - SQL Server MERGE + 连接其他表

sql-server - 通过 SSH 隧道访问 SQL Server

sql-server - SQL Server参数化查询不使用非聚集过滤

sql - SQL Server 中 ISNULL 函数的截断问题

sql-server - 获取SQL Server图数据库中的所有好友

java - 使用 JDBC 将字符串作为 datetime2(0) 插入 SQL Server 2012 会导致错误

SQL 插入 SELECT from 函数返回相同的值

sql-server - 如何使用 Node.JS 防止 SQL 注入(inject)?

sql-server - SQL OpenQuery 字符串附近的语法不正确

asp.net - 负载平衡 ASP.NET 应用程序的最佳文件存储解决方案是什么?