在这个建议的创建索引语句中sysname的含义是什么?

时间:2017-09-06 13:37:04

标签: sql-server indexing

今天我在SSMS中运行了一个查询,它给了我一个关于缺失索引的提示 但是创建索引的声明让我感到困惑,名称Name of Missing Index很清楚,但名称部分也有,sysname,我不明白。

我一直在讨论https://docs.microsoft.com/en-us/sql/t-sql/statements/create-index-transact-sql,但我无法找到有关此创建语法的说明。

所以在[<Name of Missing Index, sysname,>]部分,我可以替换Name of Missing Index并保留值sysname或者我必须在那里添加其他内容吗?

我正在使用sql server 2014

以下是SSMS创建的结果

/*
Missing Index Details from SQLQuery1.sql - SQLSERVER\GTT_192.GTT_Test (sa (70))
The Query Processor estimates that implementing the following index could improve the query cost by 43.2521%.
*/

/*
USE [GTT_Test]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[tblRitRouteDetail] ([DistanceToll])
INCLUDE ([RitID])
GO
*/

如果我要创建这样的索引有什么区别:

CREATE NONCLUSTERED INDEX IX_RitRouteDetail_DistanceToll  
  ON dbo.tblRitRouteDetail (DistanceToll)  
  INCLUDE (RitID)

2 个答案:

答案 0 :(得分:4)

sysname只是它期望的SQL数据类型。它是type.sysname,所以本质上命令就是说请创建一个索引,缺失索引的名称将是sysname类型。

  

sysname数据类型用于表列,变量和存储   存储对象名称的过程参数。确切的定义   sysname与标识符规则相关。因此,它可以   因SQL Server实例而异。 sysname在功能上是相同的   as nvarchar(128),但默认情况下,sysname为NOT NULL。在   在早期版本的SQL Server中,sysname被定义为varchar(30)。   重要说明重要信息在区分大小写的数据库中   具有二进制排序规则,sysname被识别为SQL Server系统   数据类型仅在它以小写字母显示时。   msdn reference

修改

要回答原始问题,如果您以某种方式创建索引有什么区别。没有区别,它们都会以完全相同的方式创建索引。

答案 1 :(得分:2)

如果您在显示索引时创建索引,它将被创建并完全按预期工作 从SSMS打印出来的方式的目的是为您提供创建索引的模板。

顶部的第一部分(在此段落下方)是一条评论,让您知道此建议的来源,以及预期的好处:

/*
Missing Index Details from SQLQuery1.sql - SQLSERVER\GTT_192.GTT_Test (sa (70))
The Query Processor estimates that implementing the following index could improve the query cost by 43.2521%.
*/

以下部分的索引本身包含一些您省略的部分:
1.确保您使用正确的数据库 它为您提供了索引名称的占位符,让您知道数据类型是什么(如@ gh9所述)。
2.所有模式,表和列都是分隔的 3.使用GO关键字标记批次

/*
USE [GTT_Test]
GO
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[tblRitRouteDetail] ([DistanceToll])
INCLUDE ([RitID])
GO
*/

只要你没有错误地使用错误的数据库(你没有提供支票),并且没有作为保留字的架构/表/列名,或者包含空格,你可以使用你的变化。