我正在進行分層數據庫結構的設計,該分層數據庫結構對包含產品的目錄建模(這與this question類似)。數據庫平臺是SQL Server 2005,目錄非常大(750,000個產品,超過4個級別的8,500個目錄部分),但相對靜態(每天重新加載一次),所以我們只關注READ性能。分層數據結構設計(嵌套集)
目錄分層結構的一般結構是: -
- 1級第
- 2級第
- 3級第
- 等級4組(產品有鏈接到這裏)
- 3級第
- 2級第
我們使用嵌套存儲的層級和存儲其存在在一個單獨的鏈接表該級別的產品設置模式。因此,簡化數據庫結構將是
CREATE TABLE CatalogueSection
(
SectionID INTEGER,
ParentID INTEGER,
LeftExtent INTEGER,
RightExtent INTEGER
)
CREATE TABLE CatalogueProduct
(
ProductID INTEGER,
SectionID INTEGER
)
我們確實有在一個更加複雜,我們有大約1000不同的客戶羣體可能會或可能不會看到所有目錄中的產品。因此,我們需要爲每個客戶羣維護一個單獨的「副本」,以便當他們瀏覽目錄時,他們只能看到他們的產品,而且他們也看不到任何空的部分。
爲了便於實現,我們在下面的部分中維護了一個層次結構的每個級別的產品數量表。因此,即使產品僅與層次結構的最低級別直接相關,它們也會一直統計在樹上。此表的結構是
CREATE TABLE CatalogueSectionCount
(
SectionID INTEGER,
CustomerGroupID INTEGER,
SubSectionCount INTEGER,
ProductCount INTEGER
)
所以,在這個問題 表現在層次結構的頂部水平很差。在所選目錄部分(以及所有子部分)中顯示「前10名」產品的一般查詢需要在1分鐘左右的時間內完成。在層次結構的較低部分,速度較快,但仍不夠好。
我已經在所有關鍵表上放置了索引(包括覆蓋索引),通過查詢分析器,索引調整嚮導等來運行它,但仍然無法使其執行得足夠快。
我想知道設計是否存在根本上的缺陷,或者是否因爲我們有這麼大的數據集?我們有一個合理的開發服務器(3.8GHZ Xeon處理器,4GB內存),但它只是不工作:)
感謝所有幫助
詹姆斯
也許這會有助於向我們展示緩慢的SQL?我們可能會發現一些會造成瓶頸的東西。 – Jonathan 2008-12-10 10:53:09