如何在SQL Server 2012中从表的一个分区获取计数(*)?
我的表有700万条记录,我根据ID将表分成14个部分,每个分区包含500万条记录,分区大小为40G。我想运行一个查询来获得一个分区的计数,但它扫描了所有分区,查询时间变得非常长如何在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
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 ;