4

我的表有 700 万条记录,我根据 ID 将表拆分为 14 部分,每个分区包含 500 万条记录,分区大小为 40G。我想运行一个查询来获得一个分区的计数,但是它扫描所有分区并且查询的时间变得非常大。

SELECT COUNT(*) 
FROM Item 
WHERE IsComplated = 0 
  AND ID Between 1 AND 5000000

如何只在一个分区上运行查询而不扫描其他分区?

4

1 回答 1

4

请参阅http://msdn.microsoft.com/en-us/library/ms188071.aspx

B. 获取分区表或索引的每个非空分区中的行数 以下示例返回包含数据的表 TransactionHistory 的每个分区中的行数。TransactionHistory 表使用分区函数 TransactionRangePF1 并在 TransactionDate 列上进行分区。要执行此示例,您必须首先针对 AdventureWorks2012 示例数据库运行 PartitionAW.sql 脚本。有关详细信息,请参阅分区脚本。

USE AdventureWorks2012;
GO
SELECT $PARTITION.TransactionRangePF1(TransactionDate) AS Partition, 
COUNT(*) AS [COUNT] FROM Production.TransactionHistory 
GROUP BY $PARTITION.TransactionRangePF1(TransactionDate)
ORDER BY Partition ;
GO

C. 从分区表或索引的一个分区返回所有行 下面的示例返回表 TransactionHistory 的分区 5 中的所有行。注意 注意 要执行此示例,您必须首先针对 AdventureWorks2012 示例数据库运行 PartitionAW.sql 脚本。有关详细信息,请参阅分区脚本。

SELECT * FROM Production.TransactionHistory
WHERE $PARTITION.TransactionRangePF1(TransactionDate) = 5 ;
于 2014-10-31T12:45:55.847 回答