[英]SQL Server Cross Apply speed issue
我在分開的服務器上有兩個視圖,我將它們合並為一個視圖。
這是我的查詢:
SELECT *
FROM
(
SELECT v1.Name COLLATE DATABASE_DEFAULT as Name, v1.Year as Year
FROM AgentCallsByMonth v1
UNION
SELECT v2.Name as Name, v2.Year as Year
FROM BH1PCIMD01.eGActiveDB.dbo.AgentChatsByMonth v2
) as u CROSS APPLY (
SELECT
ISNULL(v1.[Month],v2.[Month]) as [Month],
ISNULL(v2.[Chats], 0) AS [Chats], ISNULL(v1.[Calls], 0) AS [Calls]
FROM master..spt_values v
LEFT JOIN AgentCallsByMonth v1 ON v.number = v1.[MM] AND v1.Name = u.Name and v1.Year=u.Year
LEFT JOIN BH1PCIMD01.eGActiveDB.dbo.AgentChatCountByMonth v2 ON v.number = v2.[MM] AND v2.Name = u.Name and v2.Year=u.Year
WHERE v.type = 'P' AND v.number < 12 and u.Year = 2012
) o
由於某種原因,這是永遠的。 如果我分別從表中提取數據,則需要不到30秒的時間。 上一次查詢的最后一次運行是在24分鍾后進行計數。
關於需要發生的事情的一些背景知識。
我有兩個表,分別具有用戶名,00-mon格式的月份和一個計數。 現在,由於用戶沒有任何商品,因此幾個月沒有任何信息,因此不會出現。 因此,我們正在創建月份,並在其中放入0。 但是,在另一個表中,他們一個月內可能會有一些物品計數,而在另一個表中卻沒有計數。
例如。
表格1
JoeUser 01-Jan 48
JoeUser 03-Mar 12
JoeUser 09-Sep 3
表2
JoeUser 01-Jan 12
JoeUser 02-Feb 4
JoeUser 05-May 6
這是結果輸出:
JoeUser 01-Jan 48 12
JoeUser 02-Feb 0 4
JoeUser 03-Mar 12 0
JoeUser 04-Apr 0 0
JoeUser 05-May 0 6
JoeUser 06-June 0 0
etc
我同意我之前的所有評論,但我應該指出的是,使用“ COLLATE DATABASE_DEFAULT”添加歸類-最有可能導致速度變慢,尤其是在表很大的情況下。 請記住,它必須為返回的每一行執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.