我有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。
答案 0 :(得分:0)
您的问题很可能来自于您的临时表未编入索引的事实。您有两个nvarchar
列(宽度不同),每个查找都必须是表扫描。为了加快速度,您应该在临时表上创建索引,或者甚至可以将其作为主键。如果是查找,则无需重复。
还有其他可能性,但问题中没有足够的信息来辨别。这是存储过程吗?多个进程是否同时调用它?