2014-02-12 87 views
-1

我正在用MS SQL數據庫在ASP.NET(VB)中構建應用程序。它是一款搜索工具,可以搜索每輛車及其所有屬性(顏色,車門數,煤氣密度,製造年份等)的列表。該工具在網格視圖中輸出結果,用戶可以執行高級搜索和過濾。過濾需要非常細粒度(氣體範圍,顏色,生產年份範圍等),我似乎無法找到最好的方法來做這種過濾沒有一個大的SQL,哪裏的聲明將要極大地影響SQL性能和頁面加載。我覺得我錯過了一些非常明顯的東西,謝謝你的幫助。我不確定其他細節會有幫助。帶過濾的MS SQL產品列表

回答

1

這不是您正在構建的OLTP數據庫 - 它確實是一個分析數據庫。真的沒有辦法解決必須過濾的問題。問題是數據的組織是否允許大部分時間尋找,或者是否需要掃描;以及所產生的JOIN是否可以有效地完成。

我的建議是繼續前進,並創建數據規範化和所有,如你所做的。然後,構建一個將其轉換爲數據倉庫的進程,根據需要非常規地進行非規範化處理,以便您可以通過WHERE進行篩選,這些子句必須少花功夫。

對於每一個可能的搜索結果,您在表中都有一行不需要連接到其他表(或只有幾個事實表)。

您可以通過將行駛里程劃分爲例如5mpg的條帶來減少某些值(如汽油里程)的複雜性。 (10-19,20-24,25-29等)

由於您需要添加到數據並進行更改,您的數據倉庫加載過程(每天運行一次)可能會使數據倉庫是最新的。如果您希望更頻繁的加載不會使客戶端脫機,則可以將數據倉庫構建到備用節點,然後將其交換出去。假設需要2個小時才能建立。你建立2個小時到一個新的數據庫,然後交換到新的數據庫,所有的數據只有2個小時的時間。然後,您清除舊數據庫並使用該空間重新執行該操作。