2

我有 1 个可以返回超过 1000 条记录的存储过程。

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

就像我有 2 个表 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

我的UserDetails创建查询:

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]

那么是否可以在存储过程中创建临时非集群索引并在选择操作后删除该非集群索引????

4

1 回答 1

2

临时索引是个坏主意。要索引表,需要扫描表 - 就像您使用当前设置在其上执行 SELECT 一样。

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

索引可能有帮助的唯一地方是连接中使用的外键列。但是,对于您的桌子,没有任何有意义的大小统计数据,这是一个猜测。

于 2014-12-09T13:50:49.297 回答