Když vytvoříte dělenou tabulku na serveru SQL Server, určíte, které hodnoty jdou do každého oddílu.
To se provádí při vytváření funkce oddílu. Když vytváříte funkci oddílu, zadáváte hraniční hodnoty, které určují, které hodnoty vstoupí do každého oddílu.
Jakmile vytvoříte rozdělenou tabulku a vložíte data, můžete spustit normální SELECT
příkaz k vrácení dat, stejně jako byste to udělali s nerozdělenou tabulkou (ve skutečnosti i nerozdělené tabulky mají jednu oblast).
Věděli jste ale, že můžete také určit, ze kterého oddílu chcete data?
Můžete to udělat pomocí $PARTITION
systémové funkce ve vašem WHERE
doložka.
Příklad
Představte si, že máme rozdělenou tabulku, která obsahuje následující data:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-------------+
A CatId
je rozdělovací sloupec.
A k vytvoření jeho oddílů jsme použili následující funkci oddílu:
CREATE PARTITION FUNCTION CatsPartitionFunction (int)
AS RANGE LEFT FOR VALUES (-1, 5, 100);
To nám říká, jak jsou data uložena, podle hodnot ve sloupci rozdělení.
Nyní tedy můžeme spustit dotaz, který vrací data pouze z konkrétního oddílu.
Vrátit data z druhého oddílu
Zde je návod, jak můžeme vrátit všechny řádky z druhého oddílu.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 2;
Výsledek:
+---------+-------------+ | CatId | CatName | |---------+-------------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | | 4 | Bulldog | | 5 | King George | +---------+-------------+
Vrátit data ze třetího oddílu
A zde jsou všechna data ze třetího oddílu.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 3;
Výsledek:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 6 | Sharp | | 7 | Fritz | | 8 | Garfield | | 9 | Boss | +---------+-----------+
Vrátit data z prvního a posledního oddílu
V tomto případě je můj první oddíl prázdný, protože CatId
neobsahuje žádné záporné hodnoty sloupec.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 1;
Výsledek:
(0 rows affected)
Podobně je i poslední oddíl prázdný, protože není dostatek řádků k naplnění tohoto oddílu.
SELECT * FROM Cats
WHERE $PARTITION.CatsPartitionFunction(CatId) = 4;
Výsledek:
(0 rows affected)
To je v souladu s doporučením společnosti Microsoft ponechat první a poslední oddíl prázdný, aby se zabránilo jakémukoli přesunu dat v případě, že budou oddíly v budoucnu rozděleny nebo sloučeny.