在 SQL 2008 中分区表时如何使用通配符定义边界?

Posted

技术标签:

【中文标题】在 SQL 2008 中分区表时如何使用通配符定义边界?【英文标题】:How to use a wildcard in defining boundaries when partitioning a table in SQL 2008? 【发布时间】:2011-03-24 22:41:46 【问题描述】:

我在一个表中有几百万条记录(书籍/媒体数据),我想使用它们的 ISBN 号对表进行分区。但是,我想只使用数字的最后 3 位来对它们进行分区。

*000 *001 *002...*999

这会将我想要的所有内容划分为整齐、更小/更可用的数据部分,因为其中存储的书籍/媒体数量有限。所以选择/插入总是(根据我)相对较快。

现在的问题是,使用向导,在定义函数时,我无法弄清楚如何在“边界”部分使用通配符。

这可能吗?

【问题讨论】:

你只有“几百万”条记录:不值得使用分区 【参考方案1】:

你不能。那将是哈希分区,SQL Server 不支持。您可以做的是添加一个计算的持久列,该列保留 ISBN 的最后 3 位数字,并按持久计算列进行分区。

附带说明,向 SQL Server 2008 R2 添加 1000 个分区会使该表上的查询相当(非常)慢。分区永远不是获得更好性能的选择,您希望的最好结果是没有从非分区表中回归。

【讨论】:

“分区永远不是提高性能的选择”?嗯?那么能够在不同的文件组上放置不同的分区以便 I/O 可以并行发生会损害性能吗?让系统避免搜索它知道不能满足查询的分区会损害性能? 您可以将同一FG的不同文件放在不同的LUN上,并获得比分区更好的IO分配。并且通过分区键完成的任何类型的分区消除,与最左边的键具有相同键的聚集索引会更好。

以上是关于在 SQL 2008 中分区表时如何使用通配符定义边界?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2008如何创建分区表,并压缩数据库空间

SQL Server2008及以上 表分区操作详解

SQL Server 2005/2008/2012中应用分布式分区视图

如何在 SQL Server 2008 中进行分页

删除分区 SQL Server 2008

sql server 2008还原bak文件时提示磁盘空间不足