【发布时间】:2019-04-19 19:45:36
【问题描述】:
我有这个跨服务器查询,它将大量行从我们的日志数据库插入到我们的数据仓库。问题是现在这项工作已经运行了 15 个小时以上。需要大幅度减少这种情况。需要有关此查询的最佳索引的建议,或者是否可以对查询本身进行任何改进。我正在考虑一个关于 URL 的索引,用于 fromDatabase 的时间戳和用于 toDatabase 的 ID 时间戳。但不确定关键列的最佳顺序,或者我是否应该使用包含等。非常感谢所有帮助。
SELECT @SQL = N'
INSERT INTO ' + @ToDatabase + '.dbo.Log
(
ImportDateTime
,ServerSource
,DatabaseSource
,Id
,Type
,UserName
,AppCode
,SubscriptionCode
,Duration
,ServiceNamespace
,ServiceName
,MethodName
,Parameters
,[Message]
,StackTrace
,Url
,UrlReferrer
,Browser
,BrowserVersion
,Platform
,Timestamp
,IpAddress
,EriAccountId
)
(
SELECT
''' + CONVERT(VARCHAR(50),@ImportDateTime) + '''
,''' + @ServerSource + '''
,''' + @DatabaseSource + '''
,Id
,Type
,UserName
,AppCode
,SubscriptionCode
,Duration
,ServiceNamespace
,ServiceName
,MethodName
,Parameters
,Message
,StackTrace
,Url
,UrlReferrer
,Browser
,BrowserVersion
,Platform
,Timestamp
,IpAddress
,EriAccountId
FROM (
select
Id
,Type
,UserName
,AppCode
,SubscriptionCode
,Duration
,ServiceNamespace
,ServiceName
,MethodName
,Parameters
,Message
,StackTrace
,Url
,UrlReferrer
,Browser
,BrowserVersion
,Platform
,Timestamp
,IpAddress
,EriAccountId
from openquery([' + @ServerSource + '],
''select
Id
,Type
,UserName
,AppCode
,SubscriptionCode
,Duration
,ServiceNamespace
,ServiceName
,MethodName
,[Parameters] = CONVERT(NVARCHAR(MAX),[Parameters])
,[Message]
,StackTrace
,Url
,UrlReferrer
,Browser
,BrowserVersion
,Platform
,Timestamp
,IpAddress
,EriAccountId
FROM ' + @FromDatabase + '.dbo.[Log] WITH (NOLOCK)
WHERE URL LIKE ''''http://online%'''' AND CONVERT(DATETIME2, TimeStamp) > ''''' + CONVERT(NVARCHAR(50),@AssessorDeploymentTimestamp) + ''''' AND CONVERT(DATETIME2,TimeStamp) > ''''' + CONVERT(NVARCHAR(50),@DateCollected) + ''''' '') o
WHERE NOT EXISTS
(SELECT 1
FROM ' + @ToDatabase + '.dbo.Log b
WHERE b.id = o.id
AND CONVERT(DATETIME2, b.TimeStamp) > ''' + CONVERT(NVARCHAR(50),@DateCollected) + '''
AND b.ServerSource = ''' + @ServerSource + '''
)
) a
)'
【问题讨论】:
标签: sql performance tsql indexing sql-server-2014