0

這個問題既理論又實用。任何結果表明優化查詢有用的資源將不勝感激。使用SQL/XML優化數據庫查詢。建議的資源?

有一個大型SQL數據庫,它存儲大量存儲在SQLXML字段中的數據。直接查詢XML並不夠快。

我看過一些有關優化SQLXML的MSDN文章(即http://msdn.microsoft.com/en-us/library/aa902661(SQL.80).aspx),我知道索引可搜索的xml字段將提高搜索速度。

任何人都可以推薦任何額外的資源來優化數據庫,無論是在這種環境或一般情況下,這是特別有用的?一如既往,我讚賞你們都幫助

+1

「有一個大型的SQL數據庫」 - 定義大... – 2010-07-10 04:50:11

+0

對於這個問題,讓我們假設它是ebay的大小或類似的東西 – smartcaveman 2010-07-10 05:03:46

回答

0

這取決於你需要做的,你的XML內容。我有一個類似的設置,其中表結構是「通用」的,任何特定於產品的東西都存儲在XML字段中。

我們也注意到查詢XML的難度並不是特別快......並且使用XML索引(SQL Server也提供這些索引)導致我們的數據庫大小從大約1 GB跳到超過10 GB .. ...

我們現在正在做的,用於從XML選擇元素是這樣的:

  • 創建一個用戶定義的函數獲取XML內容作爲其參數
  • 提取該值XML參數
  • 使用該UDF t o在父表中定義計算的,持續的列

利用這個,我們可以提取某些關鍵值(例如, 「ProductID」或「ProductName」),並將它們作爲列存儲在父表中。它被計算,例如它始終是最新的,並且由於它也被保留,所以它與表數據一起存儲,例如,它不會經常被重新查詢和重新計算。而且由於它與表格數據一直存在,你甚至可以在它上面加上一個索引。

這很有效,但它只適用於您想要從XML中找出孤立的單值事物的情況。對於這種情況,這是一個很好的解決方案,它可以加快查詢這些值幾個數量級。

+0

我曾考慮過這個解決方案,它可以用於當前項目的領域。考慮到未來的多元化,我希望將其保持爲可搜索的狀態,但是我認爲只要能夠執行更具體的搜索,通用搜索功能就可以通過這種方式進行處理。就可擴展性而言,這對你有什麼效果? – smartcaveman 2010-07-10 21:31:04

+0

@smartcaveman:那些最終是一個INT或一個短字符串的元素工作得很好 - 你可以讓它們在包含XML的表上持久化計算列,而且它們絕對像普通的INT或VARCHAR列。可伸縮性根本不是問題。 – 2010-07-11 06:27:02

0

雖然不完全回答你的問題,你可能想要考慮關於不同的搜索策略。 SQL Server/Oracle和MySQL都非常適合存儲大量關係數據,但在大多數情況下,它們在搜索文本時顯得不是那麼好(顯然這取決於您搜索的內容和索引)。

我建議你花一點時間看看Lucene這樣的搜索引擎,因爲它可能比SQL更適合你的需求嗎?

+0

所以 - 優化策略是不使用當前數據庫?我稱之爲詭計。 – 2010-07-10 04:57:29

0

顯示預計執行計劃。

另外:

SET STATISTICS IO ON 
SET STATISTICS TIME ON