patternsqlMinor
Partition Key questions in SQL Server 2008
Viewed 0 times
partition2008sqlquestionsserverkey
Problem
We are planning to use table partitioning for our database based on an integer column. I have read about it on MSDN at http://msdn.microsoft.com/en-us/library/ms190787.aspx and have few queries.
a) Is it required that partition key be part of primary key? Even if it is not required still would it be of any benefit if it is part of primary key or clustered index?
b) In our case, we would be performing JOIN operation of partitioned tables with non-partitioned master data. Will I loose the performance gained by partition elimination? In general, if any of the tables used in JOIN operation is non-partitioned then will I loose the benefit of Partitioning?
c) Does adding filter criteria in JOIN criteria over Partition key help in any way in partition elimination? Or only the filter criteria in WHERE clause over Partition column is used for Partition elimination?
d) Should partition key be part of non-clustered index?
Thanks in advance.
a) Is it required that partition key be part of primary key? Even if it is not required still would it be of any benefit if it is part of primary key or clustered index?
b) In our case, we would be performing JOIN operation of partitioned tables with non-partitioned master data. Will I loose the performance gained by partition elimination? In general, if any of the tables used in JOIN operation is non-partitioned then will I loose the benefit of Partitioning?
c) Does adding filter criteria in JOIN criteria over Partition key help in any way in partition elimination? Or only the filter criteria in WHERE clause over Partition column is used for Partition elimination?
d) Should partition key be part of non-clustered index?
Thanks in advance.
Solution
Assuming that you have the primary key on a clustered index then the partitioning key needs to be part of the primary key.
You will not loose the benefit of partitioning by joining to non-partitioned tables, providing that the queries are designed to make use of the partitioned table, for example the following query WILL benefit from partitioning
But the following query WILL NOT benefit from partition elimination
It is a subtle difference, but in the first query, the join key is filtered in the partitioned table, taking advantage of elimination and then joined to the dimension. In the second query, the key is filtered in the dimension and then joined against the whole of the fact table, rather than just required partitions.
It goes without saying that the partitioning key needs to be in the
Adding a filter criteria on the
The Partition Key does not need to be part of a non-clustered index (NCI) but if the NCI is unique, then it needs to contain the partitioning key in order to align the index. This is where the NCI is built on the same partition scheme as the table. NCIs should also be partition aligned unless there is an exceedingly good reason not to. I have never come across a good enough reason!
You will not loose the benefit of partitioning by joining to non-partitioned tables, providing that the queries are designed to make use of the partitioned table, for example the following query WILL benefit from partitioning
SELECT F.Col1, F.Col2, D.Col3
FROM Fact_Partitioned F
INNER JOIN Dim_MyDim D ON F.Col1 = D.Col1
WHERE F.Col1 = 5But the following query WILL NOT benefit from partition elimination
SELECT F.Col1, F.Col2, D.Col3
FROM Fact_Partitioned F
INNER JOIN Dim_MyDim D ON F.Col1 = D.Col1
WHERE D.Col1 = 5It is a subtle difference, but in the first query, the join key is filtered in the partitioned table, taking advantage of elimination and then joined to the dimension. In the second query, the key is filtered in the dimension and then joined against the whole of the fact table, rather than just required partitions.
It goes without saying that the partitioning key needs to be in the
WHERE clause for elimination to work, otherwise SQL Server does not know which partition(s) the data is in.Adding a filter criteria on the
JOIN clause will not help you. It needs to be in the WHERE clause to benefit from elimination.The Partition Key does not need to be part of a non-clustered index (NCI) but if the NCI is unique, then it needs to contain the partitioning key in order to align the index. This is where the NCI is built on the same partition scheme as the table. NCIs should also be partition aligned unless there is an exceedingly good reason not to. I have never come across a good enough reason!
Code Snippets
SELECT F.Col1, F.Col2, D.Col3
FROM Fact_Partitioned F
INNER JOIN Dim_MyDim D ON F.Col1 = D.Col1
WHERE F.Col1 = 5SELECT F.Col1, F.Col2, D.Col3
FROM Fact_Partitioned F
INNER JOIN Dim_MyDim D ON F.Col1 = D.Col1
WHERE D.Col1 = 5Context
StackExchange Database Administrators Q#21770, answer score: 8
Revisions (0)
No revisions yet.