【问题标题】:Slow query performance with Partitioned tables?分区表的查询性能慢?
【发布时间】:2014-05-28 05:57:58
【问题描述】:

我正在阅读有关分区表的文章,并且对分区表是好是坏感到困惑。我确实了解分区适用于大量数据集。但这是我的困惑: 让我们假设有一个表:

Orders(Orderid,Custid,Orderdate,Shipperid) 

而且它的数据量很大;足以证明分区的合理性。该表的每一列都有选择查询;许多查询与其他表连接。 如果我根据 OrderId 对表进行分区;基于其他列的其他查询会变慢吗? 涉及OrderId列以外的列的join查询会变慢吗?

将不胜感激任何指导!谢谢

【问题讨论】:

  • 如果OrderID 列是唯一标识符,则您不想对表进行分区。根据您的表结构,您应在 OrderDate 列上进行分区。您可以按年或按月分区,具体取决于您的表有多大。这将允许 SQL Server 仅查询所需日期范围内的数据。
  • @AndLev :谢谢,但我感到困惑的是,它不会影响涉及其他列的其他选择查询;除了订单日期?我从来没有这样做过;所以我不知道它会如何影响。只是想在做任何事情之前确定一下。

标签: sql sql-server sql-server-2008 tsql sql-server-2012


【解决方案1】:

假设您有两个具有相同架构和相同数据的表。两者都聚集在 OrderID 上。这些表之一也由 OrderID 分区。有时访问是由 OrderID 键入的,有时不是。

如果您有足够的数据来强制索引 BTree 中的多个级别,则针对分区表查找单个 OrderID 可能会更快。这是因为每个分区有一个 BTree。由于分区消除,对一系列 OrderID 的查找通常会更快 - SQL Server 将仅访问满足查询所需的那些分区。

对其他键的查找或扫描也不例外。

分区还允许换入和换出整个分区,这可以在日常加载/删除周期中节省数小时。

【讨论】:

  • 创建一个新的数据库来尝试在生产上做任何事情之前。您推荐用于阅读有关分区的任何链接。提前致谢
  • @user2438237 - 刚开始时,我发现MS Technet articles 很有用。从那时起,我找到了this 的汇总,其中包含许多链接。
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 2019-05-21
  • 2021-09-26
  • 2012-09-24
  • 2020-03-03
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多