【问题标题】:Large table partitioning in SQL Server 2000SQL Server 2000 中的大表分区
【发布时间】:2014-12-19 18:40:40
【问题描述】:

在一个 SQL Server 2000 数据库中有两个表,它们有超过 5000 万条记录,大部分是“读取”而不是“写入”或“删除”。我想重新设计桌子。

在一台服务器上创建分区视图是否有助于提高速度? (在一个服务器中创建分区是否有意义?)

创建一个新的文件组并将这个表放在那个(在一个服务器上)有益吗?

除了:重新索引还有哪些其他可能的方法可以提高在此类表中获取数据的速度?

我看了很多次,但没有找到 2000 年的其他任何东西。

感谢您的建议

【问题讨论】:

  • 首先启用执行计划并查看您的查询是否有任何表或索引扫描。如果是这样,那么应该解决这些问题,因为结果执行计划应该只显示索引搜索。仍然没有达到响应预期然后寻找分区。
  • “有超过 5000 万条记录”——实际上并没有那么多。我有 1.5 亿行的表,没有分区,性能很好。
  • @MitchWheat:你对我的桌子有什么看法?可能是因为他们加入了其他表,所以速度是不能接受的。
  • @BhasyakaruluKottakota :在 99% 的情况下,用户只是阅读较新的记录(当年),那是因为我想到了分区。

标签: sql-server sql-server-2000 database-partitioning large-data


【解决方案1】:

在这种情况下,分区(分区视图或表分区)不太可能提高性能。索引查询调优是性能的关键,这对于大型表更为重要。如果您遇到性能问题,我建议您发布 DDL 和示例问题查询。

首先要说的是,分区可以提高可管理性。例如,分区视图可以通过减少脱机任务所需的时间来满足 SLA,例如当年数据的索引重建。我不认为这会成为现代硬件上只有 5000 万行的痛点。

在不同的文件组中隔离​​数据可以提高特殊情况下的性能,例如并行扫描不同年份的数据。但是,您提到 99% 的时间都会查询当年的数据,因此您的情况可能没有太大的好处。

【讨论】:

  • 古兹曼:感谢您的完整评论。只是一个问题,如果这个表中的增长率很高(每年大约 600 万条记录),索引是优化的最佳解决方案吗?另一个问题是:在这个表中,在大多数情况下,有几列是 NULL,如果我想将表分开并将这些列放在与基数相关的第二个表中,这是一个好主意吗?这对性能有帮助吗? ?
  • 索引允许查询触及手头任务的最小页面,无论表是否在增长。这是 OLTP 或混合工作负载中性能的关键。从设计的角度来看,添加另一个表可能是最好的,并且在不需要连接到该表的情况下会提高性能。但是,如果您必须全部 LEFT JOIN 到现有查询,性能可能会更差。有时需要在良好的标准化设计和性能之间进行权衡。
猜你喜欢
  • 2010-11-30
  • 1970-01-01
  • 2019-09-27
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
相关资源
最近更新 更多