SQL代码性能

Wha*_*sUP 1 performance index sql-server-2008 execution-plan query-performance

  1. 根据执行计划,你知道这个sql代码是否有效的衡量标准是什么?

  2. 根据执行计划如何知道这个sql代码是否高效?

图片1


图2


图3

SELECT [CustomerID], [CompanyName], [City], [Region]
FROM [Northwind].[dbo].[Customers] 
WHERE [Country] = 'Germany'
ORDER BY [CompanyName]

SELECT [CustomerID], [CompanyName], [City], [Region]
FROM [Northwind].[dbo].[Customers] 
WHERE [Country] = 'Germany'
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

如果您要问为什么其中一个计划比另一个更贵

您的第一个计划对未编入索引的列(或不是用于检索数据的索引的一部分)执行排序。因此,一旦检索到数据,因为您要求的是ORDER BY,结果必须重新排序(因为聚集索引将以不同的顺序返回数据)。

一个可以帮助排序的特定查询更有效的索引可能是(我并不是建议这会是理想的):

CREATE NONCLUSTERED INDEX cou_com ON dbo.Customers(Country, CompanyName)
  INCLUDE (CustomerID, City, Region);
Run Code Online (Sandbox Code Playgroud)

但是请不要在没有进行更多适当调查的情况下创建该索引。索引可能有助于此查询,但如果您的系统受 DML 限制(意味着写入活动多于读取活动),则可能会使情况变得更糟。如果此查询不慢,并且您只是担心它的相对成本高于其他查询,那么这不是您应该开始优化恕我直言的地方。

如果您一般询问如何分析执行计划

这并不是该网站的真正目的。对于一般性能调优的一些资源(书籍和电子书),我会查看这个问题及其答案。特别值得一提的是 Grant Friitchey 的免费电子书SQL Server 执行计划

您可能还对免费的SentryOne Plan Explorer感兴趣。它提供了更多信息 - 在 Management Studio 中,隐藏在“属性”面板中、在某些情况下不正确或根本不可用的信息。我在博客中介绍了如何向其他用户展示这个工具的好处,但它也可能是一个教程。