Sql server 如何在我的搜索表列上创建临时非群集索引,并在选择操作后将其删除
我有一个存储过程,可以返回1000多条记录 我想在我的搜索表列上创建临时非群集索引,因为我听说非群集索引将加快数据检索(选择)操作,减慢数据更新(更新和删除)操作,并在我的操作完成后删除该非群集索引 就像我有两个表UserDetails和CategoryMaster以及我的搜索域: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
- 用户详细信息(服务描述、技能)
- 分类管理员(名称)
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,运行查询,然后选择执行计划选项卡。这将以图形方式向您显示查询所采取的步骤。这是我们在能够就优化查询提供进一步建议之前需要看到的内容。