Sql 从临时表中选择会导致性能下降

Sql 从临时表中选择会导致性能下降,sql,sql-server,temp-tables,sql-server-2019,Sql,Sql Server,Temp Tables,Sql Server 2019,我需要一些关于以下查询的帮助,其中 Select * from #PersonDetail order by.... 要花这么长时间才能执行-为什么 此临时表Persondeail中插入了数百万条记录,插入过程需要几秒钟,但从同一临时表中最后一次选择要花很长时间 我在order by使用的列上创建了一个唯一的聚集索引,并尝试了许多其他选项,但这对性能没有任何影响 这是一个包含许多临时表的大型存储过程,但这是影响性能的最后一个选择步骤。以下是查询最后一步的示例: DROP TABLE IF EX

我需要一些关于以下查询的帮助,其中

Select * from #PersonDetail order by....
要花这么长时间才能执行-为什么

此临时表Persondeail中插入了数百万条记录,插入过程需要几秒钟,但从同一临时表中最后一次选择要花很长时间

我在order by使用的列上创建了一个唯一的聚集索引,并尝试了许多其他选项,但这对性能没有任何影响

这是一个包含许多临时表的大型存储过程,但这是影响性能的最后一个选择步骤。以下是查询最后一步的示例:

DROP TABLE IF EXISTS #PersonDetail

CREATE TABLE #PersonDetail
( 
    PersonId INT NOT NULL,
    Name NVARCHAR(50) NULL,
    Number INT NOT NULL,
    Tag NVARCHAR(50) NULL,
    UserId INT NOT NULL,
    NumberEncrypted VARCHAR(100),
    Type NVARCHAR(255),
    Status NVARCHAR(50),
    CreatedDate DATETIMEOFFSET(7),
    AddressDetailId NVARCHAR(50),
    Category NVARCHAR(50),
    PrimaryId INT,
    DailyAmount MONEY,
    
    UNIQUE (PersonId UserId),
    UNIQUE CLUSTERED(CreatedDate, UserId)
)
        
INSERT INTO #PersonDetail (PersonId, Name, Number, Tag, UserId, NumberEncrypted, 
                           Type, Status, CreatedDate, AddressDetailId, Category, PrimaryId, Amount)
    SELECT                                      
        PersonId, Name, Number, Tag, UserId, NumberEncrypted, 
        Type, Status, CreatedDate, AddressDetailId, Category, PrimaryId, DailyAmount            
    FROM 
        #User u    
    JOIN 
        dbo.DailyAmount da (NOLOCK) ON da.UserId = u.UserId
        
SELECT *
FROM #PersonDetail pd
ORDER BY CreatedDate, UserId

您必须指定正在使用的数据库

一般来说,你必须做以下事情:

在连接列DailyAmount.userId、User.userId上创建一些索引;如何创建索引必须改变; 在order by列上创建一个索引,CreatedDate+UserID;这必须改变,例如在postgresql中,一个包含2列的索引比2个索引更好;
如果您的数据没有频繁更改,您可以尝试使用物化视图并在物化视图上创建索引。

您使用的是哪种dbms?该代码是特定于产品的。@Jarlh-在SSMS中使用sql server 2019,显示客户端统计信息-很可能大部分时间都花在传输缓慢的网络上。@Arvo-ClientProcessing time-21617和TotalExecutionTime-21646。这些价值观是什么?对不起,我不知道clientstatistics是如何工作的。这是以秒为单位的时间吗?嗯,你接收到的数据几乎是千兆字节——即使在高速网络上也需要时间。如果您只是为了测试而查询这些数据,请使用TOP1000或其他;如果您需要在本地进行进一步处理,则无需执行任何操作。如果您需要在服务器上处理它,那么客户端时间无关紧要。感谢您的回复。我正在使用SQL Server 2019。已在CreatedDate列和UserId列上创建了一个聚集索引。用于在此诱惑表中插入数据的表上的索引是否会影响从同一诱惑表中选择的表的性能?