gpt4 book ai didi

sql-server - SQL Server 表分区基于模函数?

转载 作者:行者123 更新时间:2023-12-02 23:11:23 27 4
gpt4 key购买 nike

我有一个非常大的表(10+ 百万行),它开始显示查询性能下降的迹象。由于该表的大小可能很快就会增加一倍或三倍,因此我正在考虑对表进行分区以挤出一些查询性能。

表格看起来像这样:

CREATE TABLE [my_data] (
[id] [int] IDENTITY(1,1) NOT NULL,
[topic_id] [int] NULL,
[data_value] [decimal](19, 5) NULL
)

因此,任何给定主题的一堆值。对该表的查询将始终按主题 ID 进行,因此 (id, topic_id) 上有一个聚集索引。

无论如何,由于主题 ID 不受限制(可以添加任意数量的主题),我想尝试根据主题 ID 的模函数对该表进行分区。所以类似:

topic_id % 4 == 0 => partition 0
topic_id % 4 == 1 => partition 1
topic_id % 4 == 2 => partition 2
topic_id % 4 == 3 => partition 3

但是,我还没有看到任何方法告诉“创建分区函数”或“创建分区方案”在决定分区时执行此操作。

这可能吗?我们如何根据对输入值执行的操作来创建配分函数?

最佳答案

您只需将模数列创建为 PERSISTED 计算列。

Blue Peter 风格,这是我之前制作的一个(尽管我不能 100% 确定我的分区值子句正确):

CREATE PARTITION FUNCTION [PF_PartitonFour] (int)
AS RANGE RIGHT
FOR VALUES (
0,
1,
2)
GO

CREATE PARTITION SCHEME [PS_PartitionFourScheme]
AS PARTITION [PF_PartitonFour]
TO ([TestPartitionGroup1],
[TestPartitionGroup2],
[TestPartitionGroup3],
[TestPartitionGroup4])
GO

CREATE TABLE [my_data] (
[id] [int] IDENTITY(1,1) NOT NULL,
[topic_id] [int] NULL,
[data_value] [decimal](19, 5) NULL
[PartitionElement] AS [topic_id] % 4 PERSISTED,
) ON [PS_PartitionFourScheme] (PartitionElement);
GO

关于sql-server - SQL Server 表分区基于模函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2178910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com