考虑以下设置。涉及三个表#CCP_DETAILS_TEMP,Period并且ACTUALS_DETAILS
#CCP_DETAILS_TEMP会有50000记录,ACTUALS_DETAILS可以有5000000记录,period表会有2000记录
指数详情:
CREATE UNIQUE CLUSTERED INDEX IX_CCP_DETAILS_TEMP
ON #CCP_DETAILS_TEMP (CCP_DETAILS_SID)
CREATE NONCLUSTERED INDEX IXN_ACTUALS_DETAILS_PERIOD_SID_RS_MODEL_SID_CCP_DETAILS_SID_QUANTITY_INCLUSION
ON ACTUALS_DETAILS (PERIOD_SID, CCP_DETAILS_SID, RS_MODEL_SID, QUANTITY_INCLUSION)
INCLUDE( SALES, QUANTITY, DISCOUNT)
CREATE UNIQUE CLUSTERED INDEX IX_PERIOD
ON PERIOD (PERIOD_SID)
Run Code Online (Sandbox Code Playgroud)
我有一个要求,我为此编写了三种不同的方法来实现结果。现在我想知道哪个更好。
所有三个查询都或多或少地同时运行。我需要一些专家的建议,以了解哪一个会表现得更好。任何一种方法都有什么缺点吗
方法一: Outer Apply
花的时间: 4615 Milli Seconds
SELECT c.CCP_DETAILS_SID,
A.PERIOD_SID,
SALES,
QUANTITY
FROM #CCP_DETAILS_TEMP c
CROSS JOIN (SELECT PERIOD_SID
FROM BPIGTN_GAL_APP_DEV_ARM..PERIOD
WHERE PERIOD_SID BETWEEN 577 AND 624)A
OUTER apply …Run Code Online (Sandbox Code Playgroud) 我们有一个 120GB 的数据库。有一个包含 60GB 数据的表,这是无用的,我们已经截断了它。
现在数据库大小为 120GB,可用空间为 60GB。数据库至少在 3 个月内不会增长到 60GB。所以我们可以缩小数据文件。
我知道碎片问题。我可以重建我的索引,因为我们的不是 24*7 的数据库。
请建议缩小MDF文件
正在尝试优化程序。过程中有 3 个不同的更新查询。
update #ResultSet
set MajorSector = case
when charindex(' ', Sector) > 2 then rtrim(ltrim(substring(Sector, 0, charindex(' ', Sector))))
else ltrim(rtrim(sector))
end
update #ResultSet
set MajorSector = substring(MajorSector, 5, len(MajorSector)-4)
where left(MajorSector,4) in ('(00)','(01)','(02)','(03)','(04)','(05)','(06)','(07)','(08)','(09)')
update #ResultSet
set MajorSector = substring(MajorSector, 4, len(MajorSector)-3)
where left(MajorSector,3) in ('(A)','(B)','(C)','(D)','(E)','(F)','(G)','(H)','(I)','(J)','(K)','(L)','(M)','(N)','(O)','(P)','(Q)','(R)','(S)','(T)','(U)','(V)','(W)','(X)','(Y)','(Z)')
Run Code Online (Sandbox Code Playgroud)
要完成所有三个更新查询,只需不到10 秒。
所有三个更新查询的执行计划。
https://www.brentozar.com/pastetheplan/?id=r11BLfq7b
我的计划是将三个不同的更新查询变成一个更新查询,这样可以减少I/O。
;WITH ResultSet
AS (SELECT CASE
WHEN LEFT(temp_MajorSector, 4) IN ( '(00)', '(01)', '(02)', '(03)', '(04)', '(05)', '(06)', '(07)', '(08)', '(09)' )
THEN Substring(temp_MajorSector, 5, Len(temp_MajorSector) …Run Code Online (Sandbox Code Playgroud) 尝试获取正在执行的作业的会话 ID
;with JobDetails as
(
select Job_Id = left(intr1,charindex(':',intr1)-1),
Step = substring(intr1,charindex(':',intr1)+1,charindex(')',intr1)-charindex(':',intr1)-1),
SessionId = spid
from master.dbo.sysprocesses x
cross apply (select replace(x.program_name,'SQLAgent - TSQL JobStep (Job ','')) cs (intr1)
where spid > 50 and x.program_name like 'SQLAgent - TSQL JobStep (Job %'
)
select *
from msdb.dbo.sysjobs j
inner join JobDetails jd on j.job_id = jd.Job_Id
Run Code Online (Sandbox Code Playgroud)
但它会引发以下错误
消息 8169,级别 16,状态 2,第 47 行 从字符串转换为 uniqueidentifier 时转换失败。
我尝试将其转换job_id为varbinary但没有产生任何结果
;with JobDetails as
(
select Job_Id = left(intr1,charindex(':',intr1)-1), …Run Code Online (Sandbox Code Playgroud) 最近我在我的 PC 上安装了 SQL Server 2016。
这是我的服务器的详细信息:
Microsoft SQL Server 2016 (RC1) - 13.0.1200.242 (X64)
2016 年 3 月 10 日 16:49:45
版权所有 (c)
Windows 10 Pro 6.3(内部版本10586:)上的Microsoft Corporation企业评估版(64 位)
在我的 PC 上安装服务器后,尝试安装以下插件
问题:
SQL Pretty Printer甚至没有安装它会抛出错误,例如
但是SQL Pretty Printer站点说它适用于 SQL Server 2016,您可以查看链接。
下一个SQLSentry 计划资源管理器已成功安装,但插件未显示在SSMS.
版本: v2.8(内部版本 9.0.9252.0)
谁能帮我解决这个问题。请注意,两者都在 SQL Server 2014 中完美运行。
sql-server ×5
performance ×2
datafile ×1
plugins ×1
shrink ×1
ssms ×1
t-sql ×1
update ×1
windows-10 ×1