我的程式中有一個臨時表,它與另一個臨時表連接,似乎需要一些時間才能運行。誰能建議如何加速這一點。
下面是我的一段代碼:
declare @installs table
(
UserName varchar(200),
DeviceName varchar(500),
FirstSeenDate datetime
)
insert into @installs
SELECT [Username]
,[Device Name]
,min([First Seen]) as 'Install Date'
FROM [DataCollection].[dbo].[iBoss_Installed_Users]
where [Device Type] not like '%Server%'
group by [Device Name], Username
declare @installs_User table
(
UserName varchar(200),
InstalledDate varchar(max)
)
insert into @installs_User
select main.UserName,
left(main.installs,len(main.installs)-1) as "Installs"
From
(
select distinct ins2.UserName,
(
select convert(varchar(200),ins.FirstSeenDate) ', ' as [text()]
from @installs ins
where ins.UserName=ins2.UserName
order by ins.Username
for XML PATH('')
) [installs]
from @installs ins2
)[Main]
uj5u.com熱心網友回復:
我會避免使用表變數或臨時表,而是使用公共表運算式。我也會使用GROUP BY而不是DISTINCT,所以優化器知道它不必嘗試去重復你的日期串列......
declare @installs_User table
(
UserName varchar(200),
InstalledDate varchar(max)
);
WITH
installs AS
(
SELECT [Username]
,[Device Name]
,min([First Seen]) as 'Install Date'
FROM [DataCollection].[dbo].[iBoss_Installed_Users]
where [Device Type] not like '%Server%'
group by [Device Name], Username
)
insert into
@installs_User
SELECT main.UserName
,left(main.installs,len(main.installs)-1) as "Installs"
From
(
SELECT
ins2.UserName,
(
select convert(varchar(200),ins.FirstSeenDate) ', ' as [text()]
from installs ins
where ins.UserName=ins2.UserName
order by ins.Username
for XML PATH('')
) [installs]
FROM
installs ins2
GROUP BY
ins2.UserName
)
[Main]
uj5u.com熱心網友回復:
首先,這些不是臨時表,這些是表變數,SQL Server 為它們提供了硬編碼的靜態資料,因此估計總是很遙遠,而且它們很糟糕。
因此,如果您只使用臨時表,并且(可能在其上添加索引)將有很大幫助:
create table #installs
(
UserName varchar(200),
DeviceName varchar(500),
FirstSeenDate datetime
)
insert into #installs
SELECT [Username]
....
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374181.html
標籤:sql sql-server 查询语句 sql-server-2016 数据库性能
上一篇:我的插入陳述句沒有插入任何行
下一篇:TSQL資料透視表行到列
