我需要一些帮助与下面的查询在哪里的最后一步
Select * from #PersonDetail order by....
要花这么长时间来执行-为什么?
此临时表中插入了数百万条记录 #PersonDetail
插入过程需要几秒钟,但最后 Select
从同一张临时桌上下来要花很长时间。
我在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
1条答案
按热度按时间lymgl2op1#
必须指定要使用的数据库。
一般来说,你必须做以下事情:
在连接列上创建一些索引(dailyamount.userid,user.userid);如何创建索引必须改变;
在orderby列上创建索引(createddate+userid);这必须改变,例如在postgresql中,一个有2列的索引比2个索引好;
如果您的数据不经常更改,您可以尝试物化视图并在物化视图上创建索引。