如何根据sql server中的行数动态分区表?

问题描述 投票:1回答:1

我正在做一些分析以对表进行分区。

这里是桌子

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[AnalysisMaster](
    [AnalysisMasterId] [bigint] NULL,
    [AnalysisDefinitionId] [bigint] NULL,
    [AnalysisDate] [date] NULL
) ON [PRIMARY]
GO



SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[AnalysisDefinition](
    [analysisid] [int] NOT NULL,
    [dataset] [int] NULL
) ON [PRIMARY]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[OutputData](
    [analysisid] [int] NOT NULL,
    [derivativeId] [int] NOT NULL,
    [metric] [int] NOT NULL,
    [value] [decimal](18, 0) NOT NULL,
    [metricdate] [date] NULL
) ON [PRIMARY]
GO

analysisId和derivedId的组合是唯一的。

我正在寻找一个已经有100亿行的现有表“ OutputData”的分区。在analysisId,derivedId上有一个聚集索引,并且有十二个存储过程,它们使用这两列来查询数据。

因此,我最安全的选择是使用'analysisId'对表进行分区。我遇到的所有Microsoft文档,博客都基于日期/年份列提供了示例。如果我打算采取策略划分基于行数的表说1000万(1000万),我该怎么做?因此,最新的分区中有最新的1000万个“ analysisId”。 partitionFunction是什么样的?我打算仅在最新的分区上重建索引。我想有两个文件组,FG1(所有其他分区)和FG2(最新分区)。

sql sql-server-2017 database-partitioning
1个回答
0
投票
CREATE PARTITION FUNCTION PartFunc(INT) AS RANGE LEFT FOR VALUES(10000000, 20000000) ;

这将为您提供3个分区,您的1-10,000,000,然后是10-20百万,然后是2000万+

© www.soinside.com 2019 - 2024. All rights reserved.