我正在將巴西股市數據導入到SQL Server數據庫。現在我有一張表格,裏面有來自三種資產的價格信息:股票,期權和遠期。我仍然在2006年的數據,該表有超過50萬條記錄。我有更多12年的數據導入,所以這張表肯定會超過一百萬條記錄。在SQL Server上優化大型表(+ 1M行)的方法是什麼?
現在,我對優化第一種方法是將數據保持到最小尺寸,所以我減少了行大小到平均60個字節,有以下欄目:
[Stock] [int] NOT NULL [Date] [smalldatetime] NOT NULL [Open] [smallmoney] NOT NULL [High] [smallmoney] NOT NULL [Low] [smallmoney] NOT NULL [Close] [smallmoney] NOT NULL [Trades] [int] NOT NULL [Quantity] [bigint] NOT NULL [Volume] [money] NOT NULL
現在,第二個方法爲了優化是做一個聚集索引。實際上,主索引會自動修復,並使其成爲具有庫存和日期字段的複合索引。這是獨一無二的,我無法在同一天獲得同一只股票的兩個報價數據。
固定的索引確保來自同一個庫存的報價保持在一起,並且可能按日期排列。這第二個信息是真的嗎?
現在有一半的百萬記錄它採取各地200ms的從一個特定的資產選擇報價。我相信這個數字會隨着桌子的增長而變得更高。
現在對於第三種方法,我在考慮將表分成三張表,每個表用於特定市場(股票,期權和遠期)。這可能會將桌面尺寸減少1/3。現在,這種方法會有幫助還是無關緊要?現在桌子有50MB的大小,所以它可以完全放入RAM而不會有太大麻煩。
另一種方法是使用SQL Server的分區功能。我不太瞭解它,但我認爲它通常在表很大時使用,並且可以跨越多個磁盤以減少I/O延遲,對嗎?在這種情況下分區會有幫助嗎?我相信我可以在不同的表格中劃分最新值(最新年份)和最舊值,尋找最新數據的可能性更高,並且使用小分區可能會更快,對嗎?
什麼是其他的好辦法,以儘可能快的速度?表格的主要選擇用途將用於從特定資產中尋找特定範圍的記錄,例如最近3個月的資產X.將會有另一種用法,但這將是最常見的,可以通過超過3k用戶同時進行。
一些SELECT語句和/或查詢計劃會有所幫助.... – 2008-12-03 17:19:55