簡體   English   中英

SQL Server 1B +記錄表-處理upsert的最佳方法?

[英]SQL Server 1B+ records table - best way to handle upserts?

我工作的公司正在建立一個數據集市,希望在其中保存7年的數據。 不幸的是,一張表已超過10億條記錄。

我的問題是:將這張表保持最新狀態的最佳方法是什么? (每日更新或更快)

我知道MERGE語句對此非常有好處,但我希望不必為每個MERGE解析10億條記錄。 由於我們沒有SQL Server企業版,因此​​無法進行表分區。

任何方向將不勝感激:)

這里有幾種選擇; 上面在評論中解釋了兩個。 答案取決於您要對記錄執行的操作。 如果您只想修改最近的記錄,最好的方法是將這些記錄保留在活動表中,並將其他記錄作為存檔移到存檔表中。 這樣,您需要計划的作業才能將不必要的記錄移至存檔表。

如果您還希望擁有一個報告模塊,則可能需要提供一個附加表,其中包含一些數據摘要,以便您可以提取所需的報告。

您將要認真考慮拆分表。 例如,請參閱操作范例與存檔范例。

從如此龐大的表中拆分數據的第一步是識別聚簇索引如果有一個聚簇索引 )以及所有其他索引,因為您將要避免導致大量重建和數據移位的操作。

否則,如果您需要使用良好的索引來保持現狀(您應該硬着頭皮並定義一個索引, 如果它們在某種程度上可以幸免於難,而沒有一個 索引 ),則可以依靠查詢優化器進行快速索引查找 (好得多)而不是掃描,尤其是表掃描 ,這似乎是您所關心的問題)。 因此,只需編寫MERGE語句,並確保在ON子句中使用索引(並避免不惜一切代價在索引列上使用函數 !)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM