2

我的表有700萬條記錄,我根據ID做了14個分割表,每個分區包含500萬條記錄,分區大小爲40G。我想運行一個查詢來在一個分區中進行計數,但它會掃描所有分區,查詢的時間變得非常大。如何從SQL Server 2012中的表的一個分區獲取COUNT(*)?

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

如何在一個分區上運行我的查詢而不掃描其他分區?

回答

3

參見http://msdn.microsoft.com/en-us/library/ms188071.aspx

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 

C.從分區表或索引 下面的示例中的一個分區返回所有的行返回是在表TransactionHistory的隔板5的所有行。 注意注意 要執行此示例,您必須首先針對AdventureWorks2012示例數據庫運行PartitionAW.sql腳本。有關更多信息,請參見PartitioningScript。

SELECT * FROM Production.TransactionHistory 
WHERE $PARTITION.TransactionRangePF1(TransactionDate) = 5 ; 
相關問題