暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

SQL SERVER – 性能低下的表分区

原创 Ellison 2022-07-14
683

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

image.png

我希望您再次阅读该声明,我不是说表分区是为了提高性能,而是说为了降低性能。虽然我详细讨论了这一点,但我想在这篇博文中用几句话表达我的感受。

性能缓慢背后的常见误区
很多人相信——当你的系统中有一张大表时,你可以通过表分区获得更好的性能。这种想法背后的逻辑是,如果是大表,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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论