在SQL Server存储过程中创建索引

时间:2015-06-03 13:35:54

标签: sql-server stored-procedures

我需要在sql server中的表上创建索引以优化特定的SP。如果我在SP中创建索引,执行我的任务并最终删除索引以便其他SP不受我的索引影响,那可以吗?它会扰乱这种技术的均衡或任何缺点吗?该表包含300万行。

2 个答案:

答案 0 :(得分:1)

您将删除/重新添加数据导入的索引。这将是真正"真实"和"生活"表

否则,索引有点意味着(恕我直言)被创建并保持独立。

如果您只处理数据,请考虑"尝试使用" .... #tempTable索引。

IF OBJECT_ID('tempdb..#Holder') IS NOT NULL
begin
    drop table #Holder
end


CREATE TABLE #Holder
(ID INT )


/* simulate your insert */
INSERT INTO #HOLDER (ID) 
select 1 union all select 2 union all select 3 union all select 4


/* CREATE CLUSTERED INDEX IDX_TempHolder_ID ON #Holder (ID) */

CREATE INDEX IDX_TempHolder_ID ON #Holder (ID)


IF OBJECT_ID('tempdb..#Holder') IS NOT NULL
begin
    drop table #Holder
end

答案 1 :(得分:0)

我不推荐它。

在你的测试环境中,我会创建索引并查看它减慢插入速度。如果没有明显的影响(或可接受的效果),那么我只需创建索引并保留它。

在BrentOzar.com上查看他们的sp_BlitzIndex存储过程并进行一些诊断时,这可能是值得的。