rus*_*sty 5 sql-server sql-server-2005
我有一个非常大的表(超过1000万行),开始显示查询性能下降的迹象.由于这个表的大小可能会相对很快增加一倍或三倍,所以我正在考虑对表进行分区以挤出一些查询性能.
该表看起来像这样:
CREATE TABLE [my_data] (
[id] [int] IDENTITY(1,1) NOT NULL,
[topic_id] [int] NULL,
[data_value] [decimal](19, 5) NULL
)
Run Code Online (Sandbox Code Playgroud)
因此,任何给定主题的一堆值.此表上的查询将始终按主题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
Run Code Online (Sandbox Code Playgroud)
但是,在决定分区时,我还没有看到任何方法告诉"创建分区函数"或"创建分区方案"来执行此操作.
这甚至可能吗?我们如何根据对输入值执行的操作来创建分区函数?
您只需要将模数列创建为PERSISTED计算列.
蓝色彼得风格,这是我之前做的一个(虽然我不是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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5627 次 |
| 最近记录: |