我有一個視圖(ObjectFlattenedView
),它將來自各種表和視圖的數據點展平,其中包含與感興趣的對象有關的所有內容。然後,Azure搜索將此視圖的輸出索引爲我的用戶界面,以便稍後發出搜索查詢以查找相關記錄。對象具有我們可能想要搜索的各種屬性(視圖中的列)。就目標數量和屬性的不同來源而言,視圖是相當大的,因此性能是一個主要關注點。關於視圖的設計建議
我有一個新的屬性,我需要添加到這個扁平視圖。每個對象在這個TableN
它具有以下結構
ObjectId SubNo SubValue
A Sub5 0
B Sub1 0
B Sub2 1
B Sub.. ..
B SubK 0
現在我需要添加這個新屬性(AttrN
)有0到多條記錄,這樣我可以索引的對象文檔(如天青搜索調用它)包含本新屬性。扁平的看法是這樣的:
ObjectId Attr1... AttrN
A abc..... {Sub5:0}
B abd..... {Sub1:0,Sub2:1,...SubK:0}
我的困境是:
如果我平了補充一點,串接對象的不同子值的CTE,視圖的性能惡化200%至700%。該cte使用mssql的stuff
和for xml
。執行計劃確實顯示總成本的〜8%爲此for xml
聲明。我知道這會對性能產生影響,因爲我將更多的表格/視圖添加到扁平視圖中,但是我受到的影響程度相當高。
如果我外面加入我的ObjectFlattenedView
直接TableN
,那麼我的視圖將具有對象的記錄等於1對象在TableN中的記錄數。這使Azure搜索結果處理變得複雜化,例如從搜索中獲取多少條記錄並執行分頁,因爲對象可能有來自TableN
的0到M條記錄。
有沒有人遇到類似的問題,你有模式,你可以建議我處理這種情況要麼在SQL服務器端提供適當的行集或Azure搜索端處理0:每個對象(文檔)的M個記錄?