SQL Server分区与索引

SQL Server分区与索引,sql,sql-server,Sql,Sql Server,我有一张超过1.8亿行的桌子 我一直在考虑使用表分区来减少扫描(除了索引)。我考虑过的分区列之一是STATE。因为这不是一个事务表,所以我没有一个我希望分区的日期列。我们不会根据日期进行很多选择 我的问题是,是否有人曾在字符串值列而不是日期列上拆分过他们的表?如果是,那么这样做的性能考虑因素是什么 谢谢。是的,您可以按字母顺序进行分区。例如 但是,如果目标是提高查询性能,我不确定表分区是否是正确的解决方案。表分区的主要用途是加速批量数据加载和归档。Remus Rusana-MS SQL Serv

我有一张超过1.8亿行的桌子

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

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


谢谢。

是的,您可以按字母顺序进行分区。例如

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

为了提高查询性能,永远不会进行分区。使用分区时,性能总是会更差,您所能期望的最好结果是没有大的倒退,但永远不会有改进

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

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

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


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

索引可能是比分区更好的优化选择。但是,您确实需要提供更多信息,了解查询的外观、按
STATE
的值分布情况、更新
STATE
的频率等等。这取决于您的工作负载(您运行的查询)。如果你有很多只在单一状态下搜索的查询,这很好。如果您没有搜索州的查询,或者您的大多数查询都在多个州之间搜索,这可能不会有帮助。总是建议使用日期的唯一原因是,这通常是工作负载的一个特征,即大多数人都会对最近的日期进行查询。在添加任何索引之前,您需要了解您的工作负载并获取指标。此外,您还应该考虑CyrnSt店索引。