我有1个存储过程,可以返回1000多条记录。
我想在搜索表列上创建临时非群集索引,因为我听说非群集索引会加快数据检索(SELECT)操作并且速度慢关闭数据更新(UPDATE和DELETE)操作,并在我的操作完成后删除该非集群索引。
就像我有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]
可以在存储过程中创建临时非群集索引,并在选择操作后删除非群集索引 ????
答案 0 :(得分:1)
临时索引是一个坏主意。要对表进行索引,需要扫描一个表 - 就像使用当前设置对其进行SELECT一样。
您提到的字段上的永久(和临时)索引绝对没有任何效果,因为您的搜索条件具有前导通配符。无论如何,这将导致表格扫描。
索引可能帮助的唯一位置在连接中使用的外键列上。但是,如果没有关于yoiur表的任何有意义的大小统计数据,那就是猜测。