Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在我的搜索表列上创建临时非群集索引,并在选择操作后将其删除_Sql Server_Stored Procedures_Indexing_Non Clustered Index - Fatal编程技术网

Sql server 如何在我的搜索表列上创建临时非群集索引,并在选择操作后将其删除

Sql server 如何在我的搜索表列上创建临时非群集索引,并在选择操作后将其删除,sql-server,stored-procedures,indexing,non-clustered-index,Sql Server,Stored Procedures,Indexing,Non Clustered Index,我有一个存储过程,可以返回1000多条记录 我想在我的搜索表列上创建临时非群集索引,因为我听说非群集索引将加快数据检索(选择)操作,减慢数据更新(更新和删除)操作,并在我的操作完成后删除该非群集索引 就像我有两个表UserDetails和CategoryMaster以及我的搜索域: 用户详细信息(服务描述、技能) 分类管理员(名称) 这是我的存储过程: ALTER PROCEDURE [dbo].[SearchworkerProcedure1] @SearchKeyword nvar

我有一个存储过程,可以返回1000多条记录

我想在我的搜索表列上创建临时非群集索引,因为我听说非群集索引将加快数据检索(选择)操作,减慢数据更新(更新和删除)操作,并在我的操作完成后删除该非群集索引

就像我有两个表UserDetails和CategoryMaster以及我的搜索域:

  • 用户详细信息(服务描述、技能)
  • 分类管理员(名称)
这是我的存储过程:

ALTER PROCEDURE [dbo].[SearchworkerProcedure1]
    @SearchKeyword nvarchar(70)

AS
 DECLARE @Keywords TABLE
   (    
      sno INT IDENTITY(1,1) PRIMARY KEY,
      keyname VARCHAR(100),
      Shortkeyname as  substring(keyname,0,5)
    )

DECLARE @SearchKeywordTable TABLE
(
        [VendorId] [int]  NULL,
        [ServiceDescription] [nvarchar](max) NULL,
        [Skills] [nvarchar](max) NULL
)  
INSERT INTO @Keywords SELECT * FROM [splitstring_to_table](@SearchKeyword,',')
BEGIN

                    --My Query
END
MyUserDetails创建查询:

CREATE TABLE [dbo].[UserDetails](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Fullname] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_UserDetails] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

因此,可以在存储过程中创建临时非群集索引,并在选择操作后删除该非群集索引

临时索引是个坏主意。为了索引一个表,需要扫描一个表——就像用当前设置对其进行选择一样

您提到的字段上的永久(和临时)索引绝对没有任何效果,因为您的搜索条件具有前导通配符。无论如何,这将导致表扫描


索引唯一有帮助的地方是联接中使用的外键列。但是,如果没有关于yoiur表的任何有意义的大小统计数据,这只是一个猜测。

那么您建议如何提高我的存储过程的性能?发布一个执行计划,我们可以查看一下,看看是否有任何指标。但是,最大的问题是在搜索谓词中使用前导通配符。很抱歉,我没有理解。什么是执行计划??在SSMS中运行查询时,可以选择包含实际执行计划。点击Ctrl-M,运行查询,然后选择执行计划选项卡。这将以图形方式向您显示查询所采取的步骤。这是我们在能够就优化查询提供进一步建议之前需要看到的内容。