我写了一个INSERT/SELECT
非常有效的疯狂声明,除了我认为如果我可以避免使用LEN([stats].[dbo].[Domain].[DomainName])
两次,它可以再调整一点。现在运行需要 20 秒,如果我LEN
用实际数字替换这些部分进行测试,实际上需要一秒钟,因此我希望!
我一直在绞尽脑汁想如何将它变成一个变量,这样我就可以使用它两次,但只有一次性能受到影响。我在 SQL Server 2008 R2 上物有所值。
非常感谢!
INSERT INTO [stats].[dbo].[5MinStats] (Qty, MsgRequest, MsgRecType, MsgDateTime, DomainID)
SELECT
COUNT([stats].[dbo].[RawMsgLog].[MsgRequest]) AS Qty,
[stats].[dbo].[RawMsgLog].[MsgRequest],
[stats].[dbo].[RawMsgLog].[MsgRecType],
DATEADD(minute, DATEDIFF(minute, 0, [stats].[dbo].[RawMsgLog].[MsgDateTime])/ 5 * 5, 0) AS MsgDateTime,
[stats].[dbo].[Domain].[DomainID]
FROM
[stats].[dbo].[RawMsgLog], [stats].[dbo].[Domain]
WHERE
RIGHT([stats].[dbo].[Domain].[DomainName], LEN([stats].[dbo].[Domain].[DomainName])) = RIGHT([stats].[dbo].[RawMsgLog].[MsgRequest], LEN([stats].[dbo].[Domain].[DomainName]))
AND [stats].[dbo].[RawMsgLog].[switch] = 1
GROUP BY
[stats].[dbo].[RawMsgLog].[MsgRequest],
[stats].[dbo].[RawMsgLog].[MsgRecType],
DATEADD(minute, DATEDIFF(minute, 0, [stats].[dbo].[RawMsgLog].[MsgDateTime]) / 5 * 5, 0),
[stats].[dbo].[Domain].[DomainID]
ORDER BY
MsgDateTime ASC