我的表有 700 万条记录,我根据 ID 将表拆分为 14 部分,每个分区包含 500 万条记录,分区大小为 40G。我想运行一个查询来获得一个分区的计数,但是它扫描所有分区并且查询的时间变得非常大。
SELECT COUNT(*)
FROM Item
WHERE IsComplated = 0
AND ID Between 1 AND 5000000
如何只在一个分区上运行查询而不扫描其他分区?
我的表有 700 万条记录,我根据 ID 将表拆分为 14 部分,每个分区包含 500 万条记录,分区大小为 40G。我想运行一个查询来获得一个分区的计数,但是它扫描所有分区并且查询的时间变得非常大。
SELECT COUNT(*)
FROM Item
WHERE IsComplated = 0
AND ID Between 1 AND 5000000
如何只在一个分区上运行查询而不扫描其他分区?
请参阅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 ;