我的表有700萬條記錄,我根據ID做了14個分割表,每個分區包含500萬條記錄,分區大小爲40G。我想運行一個查詢來在一個分區中進行計數,但它會掃描所有分區,查詢的時間變得非常大。如何從SQL Server 2012中的表的一個分區獲取COUNT(*)?
SELECT COUNT(*)
FROM Item
WHERE IsComplated = 0
AND ID Between 1 AND 5000000
如何在一個分區上運行我的查詢而不掃描其他分區?
我的表有700萬條記錄,我根據ID做了14個分割表,每個分區包含500萬條記錄,分區大小爲40G。我想運行一個查詢來在一個分區中進行計數,但它會掃描所有分區,查詢的時間變得非常大。如何從SQL Server 2012中的表的一個分區獲取COUNT(*)?
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腳本。有關更多信息,請參見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 ;