如何在SQL Server 2012中从表的一个分区获取计数(*)?

如何在SQL Server 2012中从表的一个分区获取计数(*)?,sql,sql-server-2012,query-optimization,data-partitioning,table-splitting,Sql,Sql Server 2012,Query Optimization,Data Partitioning,Table Splitting,我的表有700万条记录,我根据ID将表分成14个部分,每个分区包含500万条记录,分区大小为40G。我想运行一个查询来获得一个分区的计数,但它扫描了所有分区,查询时间变得非常长 SELECT COUNT(*) FROM Item WHERE IsComplated = 0 AND ID Between 1 AND 5000000 如何仅在一个分区上运行查询而不扫描其他分区?请参阅 B.获取分区表或索引的每个非空分区中的行数 下面的示例返回包含数据的表TransactionHistor

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

SELECT COUNT(*) 
FROM Item 
WHERE IsComplated = 0 
  AND ID Between 1 AND 5000000
如何仅在一个分区上运行查询而不扫描其他分区?

请参阅

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

USE AdventureWorks2012;
GO
SELECT $PARTITION.TransactionRangePF1(TransactionDate) AS Partition, 
COUNT(*) AS [COUNT] FROM Production.TransactionHistory 
GROUP BY $PARTITION.TransactionRangePF1(TransactionDate)
ORDER BY Partition ;
GO
SELECT * FROM Production.TransactionHistory
WHERE $PARTITION.TransactionRangePF1(TransactionDate) = 5 ;
C.从分区表或索引的一个分区返回所有行 下面的示例返回表TransactionHistory分区5中的所有行。 附注 要执行此示例,必须首先对AdventureWorks2012示例数据库运行PartitionAW.sql脚本。有关更多信息,请参阅PartitioningScript

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