SQL Azure表分区,需要帮助以了解如何应用于现有表

t5zmwmid  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(97)

在尝试优化对Azure SQL Db上的表的访问时,我发现了此link
现在我的主要问题都在这张table上,它的定义是

CREATE TABLE dbo.ProductInstance
(
    Id                      int IDENTITY
        CONSTRAINT PK_ProductInstance
            PRIMARY KEY,
    ProductInstanceSeriesId int       NOT NULL
        CONSTRAINT FK_ProductInstance_ProductInstanceSeries_ProductInstanceSeriesId
            REFERENCES dbo.ProductInstanceSeries,
    Title                   nvarchar(256),
    Description             nvarchar(1024),
    StartDateTime           datetime2 NOT NULL,
    EndDateTime             datetime2 NOT NULL,
    Availability            int       NOT NULL,
    InitialAvailability     int       NOT NULL,
    GuideUserId             int
        CONSTRAINT FK_ProductInstance_User_GuideUserId
            REFERENCES dbo.[User],
    SignupUserId            int
        CONSTRAINT FK_ProductInstance_User_SignupUserId
            REFERENCES dbo.[User],
    GroupNumber             int       NOT NULL,
    IsActive                bit       NOT NULL,
    IsDeleted               bit       NOT NULL,
    IsPrivate               bit       NOT NULL,
    GuideNote               nvarchar(max),
    OfficeNote              nvarchar(max),
    CreatedByUserId         int       NOT NULL,
    CreatedOnUtc            datetime2 NOT NULL,
    LastModifiedOnUtc       datetime2,
    DeletedOnUtc            datetime2,
    ProductId               int,
    MappedId                int,
    ActivityId              int,
    ActivityInstanceId      varchar(50),
    LastTimeChangedDateTime date,
    TimeChangeConfirmed     bit,
    StartedAt               datetime2,
    ProductInventoryId      int
        CONSTRAINT FK_ProductInstance_ProductInventory_ProductInventoryId
            REFERENCES dbo.ProductInventory
            ON DELETE CASCADE
)
go

大多数搜索都是在StartAt / EndAt字段上完成的,所以我需要了解如何在这些字段上进行分区。
在示例中,它在Timestamp列上推理,而在我当前的实现中我没有一个Timestamp列...我应该添加一个Timestamp列还是可以在Datetime 2字段上推理?
看看我粘贴的链接中的代码

CREATE TABLE DemoPartitionTable
(
ID int,
[Timestamp] datetime PRIMARY KEY,
[Sampletext] varchar(100)
)
ON PS_Date ([Timestamp]);
GO
INSERT INTO DemoPartitionTable (id, [TimeStamp],[SampleText])
SELECT '1', '20191231','Year 2019' UNION ALL
SELECT '2', '20211231','Year 2021' UNION ALL
SELECT '1', '20210111','Year 2021' UNION ALL
SELECT '1', '20210630','Year 2021'
toiithl6

toiithl61#

对表(dbo.ProductInstance)分区Azure SQL数据库中的现有表
首先创建一个分区函数,该函数定义如何对数据进行分区。可以使用CREATE PARTITION FUNCTION语句创建分区函数。例如,可以按日期对表进行分区,每个分区包含特定日期范围的数据。

按日期对表创建分区函数

CREATE PARTITION FUNCTION pf_date_range (datetime)
AS RANGE RIGHT FOR VALUES ('2022-01-01', '2023-01-01', '2024-01-01');

**创建将分区Map到文件组的分区方案。**您可以使用CREATE PARTITION SCHEME语句创建分区方案。
--创建分区方案,将分区Map到文件组

CREATE PARTITION SCHEME ps_date_range
AS PARTITION pf_date_range
TO (fg_2022, fg_2023, fg_2024);

使用与现有表相同的架构创建新表,但应用分区方案。可以将CREATE TABLE语句与ON子句一起使用,为新表指定分区方案。
--使用与现有表相同的架构创建新的分区表

CREATE TABLE dbo.MyTable_Partitioned
(
    ID int NOT NULL,
    Date datetime NOT NULL,
    Value decimal(18,2) NOT NULL
)
ON ps_date_range(Date);

将现有表中的数据插入到新的分区表中。可以使用INSERT INTO语句将现有表中的数据插入到新的分区表中。将现有表中的数据插入到新的分区表中

INSERT INTO dbo.MyTable_Partitioned (ID, Date, Value)
SELECT ID, Date, Value
FROM dbo.MyTable;

删除现有表并将新分区表重命名为原始表名。--删除现有表并将新分区表重命名为原始表名

DROP TABLE dbo.MyTable;
EXEC sp_rename 'dbo.MyTable_Partitioned',

相关问题