在 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如何创建分区表,并压缩数据库空间