SQL Server 分区与索引

arc*_*123 2 sql sql-server

我有一个超过 1.8 亿行的表。

我一直在考虑使用表分区来减少扫描(除了索引)。我考虑作为分区依据的列之一是STATE. 由于这不是事务表,因此我没有希望作为分区依据的日期列。我们不会根据日期进行很多选择。

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

谢谢。

Tro*_*eft 5

是的,您可以按字母顺序分区。示例在这里

但是 - 如果目标是提高查询性能 - 我不确定表分区是否会是正确的解决方案。表分区的主要用途是加速批量数据加载和归档。Remus Rusana - MS SQL Server 开发人员团队成员 -在这里回答了一个非常相似的问题,引用...

永远不会为查询性能进行分区。使用分区,性能总是会更糟,你所能希望的最好的是没有大的回归,但永远不会改进。

这是来自 SQL Server 开发团队的!当然,在某些边缘情况下,分区可能会提高查询性能,但这看起来不像。

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

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

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