Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 克隆分区表的存储过程_Sql_Sql Server_Tsql_Stored Procedures - Fatal编程技术网

Sql 克隆分区表的存储过程

Sql 克隆分区表的存储过程,sql,sql-server,tsql,stored-procedures,Sql,Sql Server,Tsql,Stored Procedures,我正在将一个非常大的>2000万行的表划分为逻辑分区的表,这将导致较旧、查看和更新频率较低的行被拆分为多个表。本质上是一种手动实现企业级自动表分区功能的方法 我们有两张桌子,产品和成本。目前,所有产品记录都将其成本记录在一个中心表中,从而产生数百万行。该计划将成本分为多个表Cost1、Cost2、Cost3。。。为了减少每个表中的行数,每个产品记录将知道从哪个表中收集自己的成本 目前,此表中的所有插入都是通过一个存储过程来处理的,让我们调用此InsertCosts。在程序中,当前引用了成本表 我

我正在将一个非常大的>2000万行的表划分为逻辑分区的表,这将导致较旧、查看和更新频率较低的行被拆分为多个表。本质上是一种手动实现企业级自动表分区功能的方法

我们有两张桌子,产品和成本。目前,所有产品记录都将其成本记录在一个中心表中,从而产生数百万行。该计划将成本分为多个表Cost1、Cost2、Cost3。。。为了减少每个表中的行数,每个产品记录将知道从哪个表中收集自己的成本

目前,此表中的所有插入都是通过一个存储过程来处理的,让我们调用此InsertCosts。在程序中,当前引用了成本表

我们有两种选择来继续:

我们是否在单个存储过程中计算出一些动态SQL,这些存储过程将查看我们要插入的产品,并运行SQL Exec字符串来插入记录?存储的进程有500多行长,以增加它可能需要完成的工作量的复杂性。 或者-我们是否允许应用程序多次克隆存储的进程,因此我们有InsertCosts1、InsertCosts2、InsertCosts3。。。这些都是固定的程序。
我的直觉告诉我我们应该选择第二种。然而,风险在于这是否是一个可扩展的解决方案?我们可以很容易地回到选项1,当涉及到创建克隆存储过程时,这对我们来说也很简单,因此我不认为这样做会降低答案的复杂性。

在进行分区之前,您是否看过执行计划并考虑过更好的索引?谢谢Tanner-是的,这是我们一直在关注的问题平行的然而,由于应用程序工作方式的性质,很少访问“完成”的产品,而“活动”的产品需要更多的写入,因此数据的性质似乎完全不同。这就是为什么我们认为“较旧”数据应该与“较新”数据分开…如果您有一个位字段来过滤“已完成”/“活动”行,这可能是一个有用的读取:。它详细说明了如何在位列上添加索引,其中位列的值可以减少需要返回的行数,从而提高性能。但您必须测试它,以证明它与任何性能调优一样值得。