2012-07-24 118 views
0

員工正在經歷一個網站,從服務器讀取數據(一整排)。被他們讀選擇:哪個運行速度更快?

的數據顯示,該行是相當多的連接涉及的東西比10桌以上的結果。

問:

我應該創建並刷新包含最終resulta數據的新表中讀取所以在表現層只是我們選擇從桌面1?

2.或者我應該執行一個Select ...和一系列的連接,乘法等等來獲得這一行嗎?


我即將開始這個,我必須admint是建立一個新的大表中的數據的第一個想法,但這個問題彈出因爲我通過表被小心關係正常化,並建立新的會導致數據冗餘。

不得不說的是,所需的產品是針對員工的網頁以最快的速度訪問數據越好(這就是爲什麼起初我以爲關於創建和刷新新表)

感謝。


編輯

約300(1K也許在將來)人們將要訪問的網站。他們將查詢這一行,做他們必須做的事情,然後點擊確定,以便他們得到一個新行(猜測在查詢和查詢之間是2分鐘)。我們不希望發生的是:員工是會得到執教的時候,那些教練的因素之一是他們採取的行上(客戶端我必須說)的工作時間。因此,如果查詢時間過長(每刷新之間數秒內將是「太長」對他們來說),那麼我就必須建立以考慮到這個問題的新途徑。當然,我寧願不要。


EDIT 2

一旦點擊OK,另一個查詢觸發更新數據庫中的數據,那麼原來的查詢,以便另一行發送到網頁。

+0

我想這取決於.. - 有多少人會進入該網站? - 性能評論家? - 每張表會得到很多信息(建議創建索引)或只是一個 幾行? - 你會在將來使用其他信息? (這可能意味着如果你不正常化,你可能會重複 信息) 你應該考慮一些事情之前決定(或提供更多信息) – 2012-07-24 22:50:15

+0

這聽起來像你想要建立的是一個索引視圖。哪個SQL Server支持。 – 2012-07-24 22:50:38

+0

@MikeChristensen你想建議一個索引視圖10 +表?您是否意識到所有能夠避免索引視圖成爲可能的限制,以及即使可能,維護這種視圖所涉及的成本也是如此?這不是一個能夠將解決方案中的精靈粉塵進行手工掃描的神奇子彈。 :-) – 2012-07-24 22:55:05

回答

1

不得不說的是,所需的產品爲員工網頁訪問數據儘可能快地

爲什麼一定要儘可能快?如果它在0.1秒內運行,是不是夠快?

是不是因爲你正在運行在一個循環中查詢?如果是這樣,那麼我建議你改變你的策略來批量獲取數據,而不是一次一行。

如果你確實需要的是儘可能快無論出於何種原因,那麼是的,有一個預先計算的結果準備會比從原始數據源進行查詢的速度更快。填充表格是實現此目的的一種方式。另一種方法是使用緩存機制,這樣請求只是第一次緩慢,但對相同數據的重複請求會更快。

請注意,預先計算結果或使用緩存會提高性能,但是當原始數據更改時可能會出現陳舊數據問題。

+0

大約300(未來可能會有1k)人們將訪問該網站。他們將查詢這一行,做他們必須做的事情,然後點擊確定,以便他們得到一個新行(猜測在查詢和查詢之間是2分鐘)。我們不希望發生的是:員工是會得到執教的時候,那些教練的因素之一是他們採取的行上(客戶端我必須說)的工作時間。因此,如果查詢時間過長(每刷新之間數秒內將是「太長」對他們來說),那麼我就必須建立以考慮到這個問題的新途徑。 – 2012-07-24 22:52:03

+0

會將此信息添加到問題中,認爲它可以提供幫助。 – 2012-07-24 22:52:52

1

我會先從常規視圖開始,只有當我遇到性能問題時,纔會實現它(索引視圖或手動創建新表並使用數據填充它)。

+0

感謝您的方法。 – 2012-07-24 22:59:44

1

我寧願有一個規範化的數據庫,並運行一個可能更昂貴的查詢比非規格化數據和更快的查詢。我認爲第二種情況可能會遇到維護/可讀性問題,這不僅是爲了確保您的緩存表是最新的,而且還必須針對這些情況編寫針對該數據的所有邏輯核心。

如果它被訪問了很多,你可能想在客戶端檢索這個數據(asp.net?)來實現緩存,以防止不必要的調用。

+0

沒有考慮客戶端緩存(yes .net)。 – 2012-07-24 23:00:25