我对数据库性能还是很陌生,并了解管理工作室在幕后为我们所做的所有复杂事情,因此我们非常感谢您对学习资料的任何帮助或参考。
我的问题是我正在编写一个查询来从链接服务器获取数据并将其连接到我的本地数据库表以插入特定信息。我正在使用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分钟才能运行。
从我到目前为止所学到的,我的选择是使用临时表或在链接服务器上创建一个视图,所以我在查询中没有进行任何连接。
非常感谢任何有关优化此功能的帮助!
答案 0 :(得分:0)
将此语法与链接服务器一起使用时:
select field1, field2
from servername.databasename.ownername.tablename
where field3 = something
sql server首先会带来该表的全部内容,然后应用where子句。执行时间过慢是由所有传输的数据引起的。
解决方法是使用openquery。如果你google,“sql server openquery”,你会发现很多例子。