Temp Table Inner加入慢速表现

时间:2015-08-27 16:42:33

标签: sql sql-server

我有temp表,其中包含列PID。我有另一个table,其中存储了所有PID。但是当我对PID进行inner join时,它非常慢。 您有什么想法来优化代码?

临时表:

CREATE TABLE #tmp
(
    [PID] [nvarchar] (255) COLLATE Cyrillic_General_CI_AS NOT NULL, 
)

表:

CREATE TABLE [dbo].[PIDs]
(
    [ID] [int] NOT NULL IDENTITY(1, 1),
    [PID] [nvarchar] (20) COLLATE Cyrillic_General_CI_AS NOT NULL
)

CREATE UNIQUE NONCLUSTERED INDEX [IX_PIDs_PID] 
    ON [dbo].[PIDs] ([PID]) ON [PRIMARY]

查询:

SELECT * 
FROM #tmp
INNER JOIN dbo.PIDs AS cft ON cft.PID  = c.PID 

临时表中的记录为200000.物理表中的记录为400000。

1 个答案:

答案 0 :(得分:0)

您的问题很可能来自于您的临时表未编入索引的事实。您有两个nvarchar列(宽度不同),每个查找都必须是表扫描。为了加快速度,您应该在临时表上创建索引,或者甚至可以将其作为主键。如果是查找,则无需重复。

还有其他可能性,但问题中没有足够的信息来辨别。这是存储过程吗?多个进程是否同时调用它?