簡體   English   中英

SQL Server交叉應用速度問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM