我对数据库性能还是很陌生,并且了解管理工作室在幕后为我们所做的所有错综复杂的事情,因此感谢任何帮助或对学习材料的参考。
我的问题是我正在编写一个查询以从链接服务器获取数据并将其加入我的本地数据库表以插入特定信息。我正在使用 2 个 cte 并在 cte 中为链接服务器数据加入 2 个表。然后我使用子查询将列添加到我的结果集中,这样我就可以逐行过滤。我这样做是因为我不擅长使用 PIVOT。
with ap AS (
SELECT DISTINCT col1
,col2 ,col3 ,col4
from [linkedServer].[db].[dbo].[table] st
JOIN [linkedServer].[db].[dbo].[table2] vs ON vs.col1 = st.col1 AND vs.col2 = st.col2
WHERE vs.col3 = '' and ...
,pre as (
SELECT *
,COALESCE(
(SELECT 1 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 2 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 3 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 4 from ap where sss.col1 = ap.col1 and ap.col3 = '')
) Monday
,COALESCE(
(SELECT 1 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 2 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 3 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 4 from ap where sss.col1 = ap.col1 and ap.col3 = '')
) Tuesday
,COALESCE(
(SELECT 1 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 2 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 3 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 4 from ap where sss.col1 = ap.col1 and ap.col3 = '')
) Wednesday
,COALESCE(
(SELECT 1 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 2 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 3 from ap where sss.col1 = ap.col1 and ap.col3 = '')
,(SELECT 4 from ap where sss.col1 = ap.col1 and ap.col3 = '')
) Thursday
FROM local_Table sss
)
UPDATE tar
SET tar.monday = pre.Monday
,tar.Tuesday = pre.Tuesday
,tar.Wednesday = pre.Wednesday
,tar.Thursday = pre.Thursday
FROM local_table tar
JOIN pre on tar.column = pre.column
这大约需要 5 分钟才能运行。
从我到目前为止所学到的知识来看,我的选择是使用临时表或在链接服务器上创建一个视图,这样我就不会在我的查询中进行任何连接。
非常感谢您对优化此问题的任何帮助!