好吧,首先聲明一個免責聲明。我在一些表中使用了一個實體屬性值方法。所以基本上我在一個表中的單個列中有一個屬性列表,然後我想在單獨的視圖中將其填充到一行中。將1個數字添加到TOP選擇掛起查詢
我發現這個解決方案,它的偉大工程:
SQL: Dynamic view with column names based on column values in source table
但是初始加載是極爲緩慢的(花了超過27分鐘,填充514行)。我覺得有些東西看起來不太合適,所以我搞砸了使用TOP選擇Client表的一部分。我得到了即時結果。我發現我可以通過這種方式立即排隊整個數據庫。然而,我發現了一個非常奇怪的警告。我可以選擇的最多的是5250條記錄。
到目前爲止,我仍然得到即時結果。如果我試圖選擇5251,則查詢掛起。我在一臺測試服務器上試了一下,得到了相同的限制,但使用了不同的數字(我可以選擇最大5321)。請記住,該表只有514條記錄,所以我不知道爲什麼將1個數字添加到TOP選擇會導致它掛起。有沒有人有任何輸入?這是我的工作如下SQL查詢:
DECLARE @cols AS NVARCHAR(MAX)
DECLARE @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(a.AttributeName)
from AttributeCodes a
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT TOP 5250 ClientID, ' + @cols + ' from
(
select c.ClientID
, c.[Value]
, a.AttributeName
from Client c
inner join AttributeCodes a
on a.AttributeCodeId = c.AttributeCodeID
)x
pivot
(
min([Value])
for AttributeName in (' + @cols + ')
)p'
execute(@query)
編輯:
確定它好像問題是,執行計劃是完全通過增加另一個數字改變。我會在下面發佈兩個結果。我仍然不知道它爲什麼會改變,如果有什麼辦法可以阻止它使用哈希匹配而不是Inner Join。
Execution Plan 1(即時):
Execution Plan 1 http://i49.tinypic.com/2921r14.jpg
Execution Plan 2(30+分鐘): Execution Plan 2 http://i46.tinypic.com/358qu4n.jpg
檢查第5251行的列大小總數。如果它太大,我會期待一個錯誤,而不是一個掛起。 – HABO
儘管如此,只有514行,所以沒有第5251行,由於某種原因,儘管一旦我越過了該任意閾值,我立即從結果轉到加載10-20分鐘的結果。 –
514行中有多少個不同的屬性名稱? – HABO