2010-04-21 79 views
0

尋找具有爲報告和歷史目的而維護數據的非常大型表的策略,在日常操作中使用該數據的一小部分。用於插入高讀取表(Sql Server)的數據庫策略

背景:

我們有不斷由我們直接面對消費者的網站更新遊客和訪問表。這些表格包含每個訪問和訪問者的信息,包括機器人和爬蟲,不會導致轉換的直接流量等。

我們的後端站點允許從前端站點管理訪問者(主管)。大部分管理都發生在我們訪問者的一小部分(訪客成爲潛在客戶)上。訪問者和訪問表中的絕大多數數據僅保留用戶活動的一小部分(基本上是報告類型功能)。這不是一個索引問題,我們已經盡了我們所能做的索引,並且保持我們的索引乾淨,小而不碎。

ps:我們目前沒有數據倉庫的預算或專業知識。

問題:

願我們的系統時,他們查詢,例如,分配給他們的潛在客戶名單,以更加適應我們的最終用戶。目前,查詢是針對大多數不相關數據的龐大數據集。

我在思考一些想法。其中一個涉及新表和一個相當重要的重新架構,我並不是要求幫助。另一個涉及創建冗餘數據(例如Visitor_Archive和Visitor_Small表),其中存在用於插入和歷史/報告的較大的訪問者和訪問表,存在用於管理潛在客戶的較小visitor1表,用於發送電子郵件的引導者,需要引導電話號,需要我的引線的名單等。

我伸手的原因是,我喜歡上保持Visitor_Archive和同步的Visitor_Small表的最佳途徑意見...

複製?我可以使用複製來只複製具有特定列值的數據嗎(FooID = x)

是否有其他策略?

回答

1

這聽起來像是你的桌子是分區的完美人選。既然你沒有提到它,我會簡單地描述它,並給你一些鏈接,以防你不知道它。

您可以跨多個物理或邏輯設備劃分表/索引的行,專門用於提高數據集的性能,您可能隨時需要知道數據的已知子集。對錶進行分區仍然允許您將其作爲一個表進行交互(您不需要引用分區或查詢中的任何內容),但SQL Server能夠對僅涉及數據的一個分區的查詢執行若干優化。實際上,在Designing Partitions to Manage Subsets of Data中,AdventureWorks示例幾乎與您的確切場景相匹配。

我會做一些研究,從這裏開始,按照你的方式:Partitioned Tables and Indexes

0

簡單的解決方案:創建單獨的表,取消規範化,其中包含所有字段。創建存儲過程,它將根據您的計劃更新此表。創建SQl代理作業以調用SP。

索引表格,你會看到它是如何被查詢的。

如果您需要清除歷史記錄,請創建另一個表來保存它,並使用另一個表來填充它並清理主報表。

您可能會得到多個報告表 - 沒關係 - 現在空間很便宜。