今天我在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)
答案 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
*/
只要你没有错误地使用错误的数据库(你没有提供支票),并且没有作为保留字的架构/表/列名,或者包含空格,你可以使用你的变化。