2017-04-20 102 views
1

我有一个超过1.8亿行的表。SQL Server分区与索引

我一直在考虑表分区来减少扫描(除了索引)。我认为划分的一列是STATE。由于这不是一个交易表,我没有我想分割的日期列。我们不会根据日期做很多选择。

我的问题是有人曾经在字符串值列而不是日期分割他们的表?如果是这样,那么这样做的性能考虑是什么?

谢谢。

+3

索引可能是比分区更好的优化选择。但是,你真的需要提供更多关于查询的信息,'STATE'的值分布是什么,'STATE'更新的频率等等。 –

+1

这取决于你的工作量(你运行的查询)。如果你有很多只有在单一状态下搜索的查询,这很好。如果您没有对状态进行查询搜索,或者大多数查询都在多个州进行搜索,则这可能无济于事。总是建议日期的唯一原因是因为这通常是工作负载的特征,即大多数人在最近的日期运行查询。在添加任何索引之前,您需要了解您的工作负载并制定指标。你也应该考虑列存储索引 –

回答

0

是的,你可以按字母顺序进行分区。示例here

但是 - 如果目标是提高查询性能 - 我不确定表分区是否是正确的解决方案。表分区的主要用途是加速批量数据加载和归档。莱姆斯Rusana - MS SQL Server开发团队成员 - 回答非常similar question here,报价...

分区是从来没有的查询性能来完成。随着分区的表现将永远变得更糟,你所希望的最好不是大的回归,但从来没有改善。

而这来自SQL Server开发团队!当然,可能有一些边缘情况分区提高查询性能,但这看起来不像一个。

幸运的是,除了分区以外,我们还有很多选项可以提高性能。查询优化是一门艺术,所以为了真正回答你的问题,我们需要更多的细节。桌子有多宽?你有一些示例查询吗?什么是数据分布(块状)?

仅仅根据你所说的 - 这不是一个交易表 - 然后创建索引听起来像一个安全的赌注。我们可以添加这些而不用担心会对数据库DML性能(更新/插入/删除)产生负面影响。要开始调查要添加的索引,请启动SSMS,单击显示实际执行计划按钮,然后执行其中一个有问题的查询。现在检查执行计划。请添加任何发现的missing indices。希望这可以帮助。祝你好运!

TL:DR分区不会提高查询性能,请尝试索引。