我喜欢与我的客户一起进行全面的数据库性能健康检查。咨询中最好的部分是我每天都能应对新的挑战。大多数时候,它是一种新技术,数据库中的新增强功能,或者只是我多年来一直在做的对话。永远不会过时的对话之一是 Table Partitioning for Slow Performance。

我希望您再次阅读该声明,我不是说表分区是为了提高性能,而是说为了降低性能。虽然我详细讨论了这一点,但我想在这篇博文中用几句话表达我的感受。
性能缓慢背后的常见误区
很多人相信——当你的系统中有一张大表时,你可以通过表分区获得更好的性能。这种想法背后的逻辑是,如果是大表,SQL Server 必须读取整个表才能获取数据,如果表较小,则读取表的过程会更快。
在某些情况下实际上是这样,但在大多数情况下,如果有一个巨大的表并且扫描它以读取几行,那么无论您应用多少分区解决方案,您都不会获得更好的性能。
索引与分区
如果您只需要从表中读取几行并且您的表很大或很大,那么更好的解决方案实际上是索引而不是分区。如果你已经正确地索引了你的表,当你想读取数据时,你可以很容易地从索引中读取它,而不是去大表。如果由于任何原因,您必须转到大表(键查找或行 ID 查找),在适当索引的帮助下,您将只读取几行而不是整个表。
如果您从逻辑上思考,索引只不过是在我们知道数据所在位置的地方进行分区。即使您对表进行分区,您仍然必须在其上创建索引以更快地检索数据。
何时分区?
这给我们带来了一个经典的问题。如果在进行分区时分区对提高查询性能没有帮助。嗯,答案很简单。当您想要频繁地批量删除您的特定数据集时,应该进行分区。在这种情况下,您可以创建一个分区并将其切换为空分区,以更快地删除大量数据。
此外,当磁盘空间不足时,表分区会很有帮助。
总之,分区本身可能无法为您带来更好的性能。当您对查询进行分区甚至开始变慢时,这是很有可能的,因为现在在您的查询和数据之间还有一个要处理的函数。
在Twitter 上与我联系,我们可以讨论更多。
参考: Pinal Dave ( http://blog.SQLAuthority.com )
原文标题:SQL SERVER – Table Partitioning for Slow Performance
原文作者:皮纳尔戴夫
原文地址:https://blog.sqlauthority.com/2021/10/04/sql-server-table-partitioning-for-slow-performance/




