2011-04-19 39 views
0

我們在其中一個存儲XML文件的表中有nText字段。我們能夠在nText字段中保存大約40-50 MB的大型XML。但是,當我們嘗試像 那樣選擇從archive_id = 123的存檔中選擇archive_xml時,超時。在SQL中超時讀取大nText列

任何替代或任何建議?

感謝, Ĵ

+1

archive_id索引? – taylonr 2011-04-19 15:18:27

回答

0

當你說這是超時,它是超時在服務器上或者在你的代碼?這可能影響不同的解決方案

如果它是一個服務器的問題,確保表中有您所查詢的字段(例如archive_id)

,如果它在代碼超時「簡單」的解決方案是延長用戶的連接超時有意義的指標。我會先嚐試其他的東西,比如提高服務器性能,因爲連接超時通常會隱藏更大的問題。

+0

我使web.config文件中的連接超時爲600,但它仍然超時 – jvm 2011-04-19 16:52:51

+0

我使它成爲3600,仍然超時執行我的sp。如果我在查詢分析器上運行這個sp,它需要將近4分鐘才能執行 – jvm 2011-04-19 17:21:57

+1

@jatin,您需要開始查看索引您的表。 40MB並沒有太大的回退。我查詢了數百萬行數據帶來了大量數據,並且不需要4分鐘。 – taylonr 2011-04-19 18:21:52

0

如果您通過某種語言(如C#)執行此查詢,請確保在執行此操作之前關閉不需要的記錄集。

通過選擇工具/選項,然後選擇連接選項卡可以增加查詢超時查詢分析器。然後增加'Query Timeout'參數的值。

此外,索引此字段將大大縮短執行查詢的時間。

+0

你的意思是它應該在archive_xml上有索引嗎? – jvm 2011-04-19 17:00:00

+0

我使它成爲3600,在執行我的sp時仍然超時。如果我在查詢分析器上運行這個sp,它需要將近4分鐘才能執行 – jvm 2011-04-19 17:23:42

0

根據MSDN 如果ntext,文本和圖像數據值不超過Unicode,則爲4,000個字符;字符,8000個字符;或二進制字符串(8,000字節),可以在SELECT,UPDATE和INSERT語句中引用該值,這與更小的數據類型的引用方式大致相同。例如,可以在SELECT語句選擇列表中引用具有短值的ntext列,這與引用nvarchar列的方式相同。必須遵守一些限制,例如不能直接引用WHERE子句中的ntext,text或image列。這些列可以包含在WHERE子句中作爲返回另一個數據類型(例如ISNULL,SUBSTRING或PATINDEX)的函數的參數,或者包含在IS NULL,IS NOT NULL或LIKE表達式中。

處理大數據值 但是,當ntext,text和image數據值變大時,它們必須逐塊處理。 Transact-SQL和數據庫API都包含允許應用程序逐塊處理ntext,text和image數據的函數。

數據庫API按照處理長的ntext,文本和圖像列的一種通用的模式:

要讀取長列,應用程序只包括NTEXT,文字,或在選擇圖像列列表,然後將該列綁定到一個足夠大的程序變量,以保存合理的數據塊。應用程序然後執行該語句,並使用API​​函數或方法一次將數據檢索到綁定變量中。

要編寫長列,應用程序將執行帶有參數標記(?)的INSERT或UPDATE語句,以替換放置在ntext,text或image列中的值的位置。參數標記(或ADO情況下的參數)綁定到足夠大的程序變量以容納數據塊。應用程序進入一個循環,首先將下一組數據移動到綁定變量中,然後調用API函數或方法來寫入該數據塊。重複此操作直到整個數據值被髮送完畢。