【发布时间】:2011-01-11 20:14:09
【问题描述】:
我有一个非常大的表(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
但是,我还没有看到任何方法告诉“创建分区函数”或“创建分区方案”在决定分区时执行此操作。
这甚至可能吗?我们如何根据对输入值执行的操作来制作分区函数?
【问题讨论】:
-
"此表上的查询将始终按主题 ID,因此 (id, topic_id) 上有一个聚集索引。" (topic_id, id) 上的聚集索引不是更有意义吗?
-
嗨,马克,抱歉,索引确实在 (id, topic_id) 上
标签: sql-server sql-server-2005