现有表更改为分区表的问题,请帮忙。

时间:2022-05-08 04:38:26
现有一个表,数据量在800w。想进行分区表处理进行性能优化,该如何做呢。
表结构中id字段是主键和聚集索引字段。

10 个解决方案

#1


可以尝试按id来做分区键,不过800W做分区。。。

#2


现在访问还算正常,但是like模糊查询之后 在翻页 基本会死掉了。查了一些资料,说现有表做分区 需要先删除主键 在重新建立。没搞太明白。不敢贸然测试,怕影响了正常的访问。

#3


SQL Server数据库表分区操作过程由三个步骤组成:
  1. 创建分区函数
  2. 创建分区架构
  3. 对表进行分区
  下面将对每个步骤进行详细介绍。
  步骤一:创建一个分区函数
  此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值( how)。这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
  我们可以通过指定每个分区的边界条件来定义分区。例如,假定我们有一份Customers表,其中包含了关于所有客户的信息,以一一对应的客户编号(从1到1,000,000)来区分。我们将通过以下的分区函数把这个表分为四个大小相同的分区:  
CREATEPARTITIONFUNCTIONcustomer_partfunc(int)
  ASRANGERIGHT
  FORVALUES(250000,500000,750000)
  这些边界值定义了四个分区。第一个分区包括所有值小于250,000的数据,第二个分区包括值在250,000到49,999之间的数据。第三个分区包括值在500,000到7499,999之间的数据。所有值大于或等于750,000的数据被归入第四个分区。
  请注意,这里调用的"RANGE RIGHT"语句表明每个分区边界值是右界。类似的,如果使用"RANGE LEFT"语句,则上述第一个分区应该包括所有值小于或等于250,000的数据,第二个分区的数据值在250,001到500,000之间,以此类推。
  步骤二:创建一个分区架构
  一旦给出描述如何分割数据的分区函数,接着就要创建一个分区架构,用来定义分区位置( where)。创建过程非常直截了当,只要将分区连接到指定的文件组就行了。例如,如果有四个文件组,组名从"fg1"到"fg4",那么以下的分区架构就能达到想要的效果:  
CREATEPARTITIONSCHEMEcustomer_partscheme
  ASPARTITIONcustomer_partfunc
  TO(fg1,fg2,fg3,fg4)
  注意,这里将一个分区函数连接到了该分区架构,但并没有将分区架构连接到任何数据表。这就是可复用性起作用的地方了。无论有多少数据库表,我们都可以使用该分区架构(或仅仅是分区函数)。
  步骤三:对一个表进行分区
  定义好一个分区架构后,就可以着手创建一个分区表了。这是整个分区操作过程中最简单的一个步骤。只需要在表创建指令中添加一个"ON"语句,用来指定分区架构以及应用该架构的表列。因为分区架构已经识别了分区函数,所以不需要再指定分区函数了。
  例如,使用以上的分区架构创建一个客户表,可以调用以下的Transact-SQL指令:  
CREATETABLEcustomers(FirstNamenvarchar(40),LastNamenvarchar(40),CustomerNumberint)
  ONcustomer_partscheme(CustomerNumber)

#4


引用 3 楼 acherat 的回复:
SQL Server数据库表分区操作过程由三个步骤组成:
  1. 创建分区函数
  2. 创建分区架构
  3. 对表进行分区
  下面将对每个步骤进行详细介绍。
  步骤一:创建一个分区函数
  此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值(how)。这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
  我们可以通过指定每个分区的边界条件来……

我现在表已经存在了。该如何办呢?

#5


楼主自己新建一个库,将这个表导入到新库的一个表中,对新库的表做分区,按步骤练练!

#6


800W数据用分区表??没必要吧

#7


引用 6 楼 fredrickhu 的回复:
800W数据用分区表??没必要吧


现在访问还算正常,但是like模糊查询之后 在翻页 基本会死掉了。怎么办呢

#8


积分,积分

#9


如果你常用的查询条件中 没有分区的条件列,分区和不分区没有任何区别

比如 你按ID做为条件列来分区,可是你查询的时候却是  LIKE '字段A%' 这样是没有什么区别的

#10


做全文索引

#1


可以尝试按id来做分区键,不过800W做分区。。。

#2


现在访问还算正常,但是like模糊查询之后 在翻页 基本会死掉了。查了一些资料,说现有表做分区 需要先删除主键 在重新建立。没搞太明白。不敢贸然测试,怕影响了正常的访问。

#3


SQL Server数据库表分区操作过程由三个步骤组成:
  1. 创建分区函数
  2. 创建分区架构
  3. 对表进行分区
  下面将对每个步骤进行详细介绍。
  步骤一:创建一个分区函数
  此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值( how)。这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
  我们可以通过指定每个分区的边界条件来定义分区。例如,假定我们有一份Customers表,其中包含了关于所有客户的信息,以一一对应的客户编号(从1到1,000,000)来区分。我们将通过以下的分区函数把这个表分为四个大小相同的分区:  
CREATEPARTITIONFUNCTIONcustomer_partfunc(int)
  ASRANGERIGHT
  FORVALUES(250000,500000,750000)
  这些边界值定义了四个分区。第一个分区包括所有值小于250,000的数据,第二个分区包括值在250,000到49,999之间的数据。第三个分区包括值在500,000到7499,999之间的数据。所有值大于或等于750,000的数据被归入第四个分区。
  请注意,这里调用的"RANGE RIGHT"语句表明每个分区边界值是右界。类似的,如果使用"RANGE LEFT"语句,则上述第一个分区应该包括所有值小于或等于250,000的数据,第二个分区的数据值在250,001到500,000之间,以此类推。
  步骤二:创建一个分区架构
  一旦给出描述如何分割数据的分区函数,接着就要创建一个分区架构,用来定义分区位置( where)。创建过程非常直截了当,只要将分区连接到指定的文件组就行了。例如,如果有四个文件组,组名从"fg1"到"fg4",那么以下的分区架构就能达到想要的效果:  
CREATEPARTITIONSCHEMEcustomer_partscheme
  ASPARTITIONcustomer_partfunc
  TO(fg1,fg2,fg3,fg4)
  注意,这里将一个分区函数连接到了该分区架构,但并没有将分区架构连接到任何数据表。这就是可复用性起作用的地方了。无论有多少数据库表,我们都可以使用该分区架构(或仅仅是分区函数)。
  步骤三:对一个表进行分区
  定义好一个分区架构后,就可以着手创建一个分区表了。这是整个分区操作过程中最简单的一个步骤。只需要在表创建指令中添加一个"ON"语句,用来指定分区架构以及应用该架构的表列。因为分区架构已经识别了分区函数,所以不需要再指定分区函数了。
  例如,使用以上的分区架构创建一个客户表,可以调用以下的Transact-SQL指令:  
CREATETABLEcustomers(FirstNamenvarchar(40),LastNamenvarchar(40),CustomerNumberint)
  ONcustomer_partscheme(CustomerNumber)

#4


引用 3 楼 acherat 的回复:
SQL Server数据库表分区操作过程由三个步骤组成:
  1. 创建分区函数
  2. 创建分区架构
  3. 对表进行分区
  下面将对每个步骤进行详细介绍。
  步骤一:创建一个分区函数
  此分区函数用于定义你希望SQL Server如何对数据进行分区的参数值(how)。这个操作并不涉及任何表格,只是单纯的定义了一项技术来分割数据。
  我们可以通过指定每个分区的边界条件来……

我现在表已经存在了。该如何办呢?

#5


楼主自己新建一个库,将这个表导入到新库的一个表中,对新库的表做分区,按步骤练练!

#6


800W数据用分区表??没必要吧

#7


引用 6 楼 fredrickhu 的回复:
800W数据用分区表??没必要吧


现在访问还算正常,但是like模糊查询之后 在翻页 基本会死掉了。怎么办呢

#8


积分,积分

#9


如果你常用的查询条件中 没有分区的条件列,分区和不分区没有任何区别

比如 你按ID做为条件列来分区,可是你查询的时候却是  LIKE '字段A%' 这样是没有什么区别的

#10


做全文索引