Когато създавате разделена таблица в SQL Server, вие посочвате кои стойности влизат във всеки дял.
Това се прави, когато създавате функцията за дял. Когато създавате функцията за дял, вие посочвате гранични стойности, които определят кои стойности влизат във всеки дял.
След като създадете вашата разделена таблица и сте вмъкнали данни, можете да изпълните нормален SELECT
оператор за връщане на данни, точно както бихте направили с неразделена таблица (всъщност дори неразделените таблици имат един дял).
Но знаете ли, че можете също да посочите от кой дял искате данни?
Можете да направите това с помощта на $PARTITION
системна функция във вашия WHERE
клауза.
Пример
Представете си, че имаме разделена таблица, която съдържа следните данни:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
И CatId
е разделителната колона.
И ние използвахме следната функция за дялове, за да създадем нейните дялове:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
Това ни казва как се съхраняват данните според стойностите в колоната за разделяне.
Така че вече можем да изпълним заявка, която връща данни само от конкретен дял.
Върнете данни от втория дял
Ето как можем да върнем всички редове от втория дял.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Резултат:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Връщане на данни от третия дял
И ето всички данни от третия дял.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Резултат:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Връщане на данни от първия и последния дял
В този случай първият ми дял е празен, защото няма отрицателни стойности в CatId
колона.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Резултат:
(0 rows affected)
По същия начин последният дял също е празен, тъй като няма достатъчно редове за попълване на този дял.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Резултат:
(0 rows affected)
Това се придържа към препоръката на Microsoft за оставяне на първия и последния дял празни, за да се избегне всяко движение на данни в случай, че дяловете бъдат разделени или обединени в бъдеще.